程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 突然發現這周有點忙。。著玩-PHP進階,有點忙-php

突然發現這周有點忙。。著玩-PHP進階,有點忙-php

編輯:關於PHP編程

突然發現這周有點忙。。著玩-PHP進階,有點忙-php


  hi

周二才,不過我突然意識到這周有點忙著玩的感覺,還是很期待的——今天下午去市裡,晚上回來看電影,明晚聚餐吃火鍋,後天下午拍短片,晚上可能要打球,周五,嗯,就到周五了。雖然這樣下去連怎麼寫(bian)周報都不知道,但還是來做這個的好。

1、PHP進階完結篇

十一、數據庫操作

11.1 PHP支持哪些數據庫

PHP通過安裝相應的擴展來實現數據庫操作,現代應用程序的設計離不開數據庫的應用,當前主流的數據庫有MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL,Access等,這些數據庫PHP都能夠安裝擴展來支持,一般情況下常說的LAMP架構指的是:Linux、Apache、Mysql、PHP,因此Mysql數據庫在PHP中的應用非常廣泛,我們會在本章中簡單的了解Mysql的操作方法。

11.2 數據庫擴展

PHP中一個數據庫可能有一個或者多個擴展,其中既有官方的,也有第三方提供的。像Mysql常用的擴展有原生的mysql庫,也可以使用增強版的mysqli擴展,還可以使用PDO進行連接與操作。

不同的擴展提供基本相近的操作方法,不同的是可能具備一些新特性,以及操作性能可能會有所不同。

mysql擴展進行數據庫連接的方法:

$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');

mysqli擴展:

$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');

PDO擴展

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);

<?php
$link = mysql_connect('127.0.0.1', 'code1', '') or die('數據庫連接失敗');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
$result = mysql_query('select * from user limit 1');
$row = mysql_fetch_assoc($result);
print_r($row);

11.3 連接MySQL數據庫

PHP要對數據庫進行操作,首先要做的是與數據庫建立連接,通常我們使用mysql_connect函數進行數據庫連接,該函數需要指定數據庫的地址,用戶名及密碼。

$host = 'localhost';
$user = 'code1';
$pass = '';
$link = mysql_connect($host, $user, $pass);

PHP連接數據庫的方式類似於直接在命令行下通過進行連接,類似:mysql -hlocalhost -ucode1 -p,當連接成功以後,我們需要選擇一個操作的數據庫,通過mysql_select_db函數來選擇數據庫。

mysql_select_db('code1');

通常我們會先設置一下當前連接使用的字符編碼,一般的我們會使用utf8編碼。

mysql_query("set names 'utf8'");

通過上面的步驟,我們就與數據庫建立了連接,可以進行數據操作了。

<?php
$host = '127.0.0.1';
$user = 'code1';
$pass = '';
//在這裡編寫數據庫連接代碼
mysql_connect($host,$user,$pass);
mysql_select_db('code1');
mysql_query("set names 'utf8'");

 11.4 執行MySQL查詢

在數據庫建立連接以後就可以進行查詢,采用mysql_query加sql語句的形式向數據庫發送查詢指令。

$res = mysql_query('select * from user limit 1');

對於查詢類的語句會返回一個資源句柄(resource),可以通過該資源獲取查詢結果集中的數據。

$row = mysql_fetch_array($res);
var_dump($row);

默認的,PHP使用最近的數據庫連接執行查詢,但如果存在多個連接的情況,則可以通過參數指令從那個連接中進行查詢。

$link1 = mysql_connect('127.0.0.1', 'code1', '');
$link2 = mysql_connect('127.0.0.1', 'code1', '', true); //開啟一個新的連接
$res = mysql_query('select * from user limit 1', $link1); //從第一個連接中查詢數據

<?php
//連接數據庫
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//在這裡進行數據查詢
$arr=mysql_query("select * from user limit 1");
$row=mysql_fetch_row($arr);
print_r($row);
echo $row[0];

11.5 插入新數據到MySQL中

當我們了解了如何使用mysql_query進行數據查詢以後,那麼類似的,插入數據其實也是通過執行一個sql語句來實現,例如:

$sql = "insert into user(name, age, class) values('李四', 18, '高三一班')";
mysql_query($sql); //執行插入語句

通常數據都是存儲在變量或者數組中,因此sql語句需要先進行字符串拼接得到。

$name = '李四';
$age = 18;
$class = '高三一班';
$sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
mysql_query($sql); //執行插入語句

在mysql中,執行插入語句以後,可以得到自增的主鍵id,通過PHP的mysql_insert_id函數可以獲取該id。

$uid = mysql_insert_id();

這個id的作用非常大,通常可以用來判斷是否插入成功,或者作為關聯ID進行其他的數據操作。

11.6 取得數據查詢結果

通過前面的章節,我們發現PHP操作數據庫跟MySql客戶端上操作極為相似,先進行連接,然後執行sql語句,再然後獲取我們想要的結果集。

PHP有多個函數可以獲取數據集中的一行數據,最常用的是mysql_fetch_array,可以通過設定參數來更改行數據的下標,默認的會包含數字索引的下標以及字段名的關聯索引下標。

$sql = "select * from user limit 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

可以通過設定參數MYSQL_NUM只獲取數字索引數組,等同於mysql_fetch_row函數,如果設定參數為MYSQL_ASSOC則只獲取關聯索引數組,等同於mysql_fetch_assoc函數。

$row = mysql_fetch_row($result);
$row = mysql_fetch_array($result, MYSQL_NUM); //這兩個方法獲取的數據是一樣的
$row = mysql_fetch_assoc($result);
$row = mysql_fetch_array($result, MYSQL_ASSOC);

如果要獲取數據集中的所有數據,我們通過循環來遍歷整個結果集。

$data = array();
while ($row = mysql_fetch_array($result)) {
    $data[] = $row;
}

<?php
//連接數據庫
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//數據預處理 防止查詢不到數據
mysql_query("insert into user(name, age, class) values('王二', 19, '高三五班')");
//進行數據查詢
$sql = "select * from user limit 1";
$result = mysql_query($sql);

//在這裡獲取一行數據
$row=mysql_fetch_assoc($result);

echo '<pre>';
print_r($row);
echo '</pre>';

11.7 查詢分頁數據

上一節中,我們了解到通過循環可以獲取一個查詢的所有數據,在實際應用中,我們並不希望一次性獲取數據表中的所有數據,那樣性能會非常的低,因此會使用翻頁功能,每頁僅顯示10條或者20條數據。

通過mysql的limit可以很容易的實現分頁,limit m,n表示從m行後取n行數據,在PHP中我們需要構造m與n來實現獲取某一頁的所有數據。

假定當前頁為$page,每頁顯示$n條數據,那麼m為當前頁前面所有的數據,既$m = ($page-1) * $n,在知道了翻頁原理以後,那麼我們很容易通過構造SQL語句在PHP中實現數據翻頁。

$page = 2;
$n = 2;
$m = ($page - 1) * $n;
$sql = "select * from user limit $m, $n";
$result = mysql_query($sql);
//循環獲取當前頁的數據
$data = array();
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

在上面的例子中,我們使用了$m與$n變量來表示偏移量與每頁數據條數,但我們推薦使用更有意義的變量名來表示,比如$pagesize, $start, $offset等,這樣更容易理解,有助於團隊協作開發。

<?php
//連接數據庫
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//預設翻頁參數
$page = 2;
$pagesize = 2;
//在這裡構建分頁查詢
$start=($page-1)*$pagesize;

$sql="SELECT * FROM user LIMIT $start,$pagesize";

//獲取翻頁數據
$result = mysql_query($sql);
$data = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$data[] = $row;
}
echo '<pre>';
print_r($data);
echo '</pre>';

11.8 更新與刪除數據

數據的更新與刪除相對比較簡單,只需要構建好相應的sql語句,然後調用mysql_query執行就能完成相應的更新與刪除操作。

$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
    echo '更新成功';
}

同樣的刪除可以使用類似以下的代碼:

$sql = "delete from user where id=2 limit 1";
if (mysql_query($sql)) {
    echo '刪除成功';
}

對於刪除與更新操作,可以通過mysql_affected_rows函數來獲取更新過的數據行數,如果數據沒有變化,則結果為0。

$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
    echo mysql_affected_rows();
}

<?php
//連接數據庫
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//預設數據以便進行更新操作
mysql_query("insert into user(name, age, class) values('王二', 19, '高三五班')");
$id = mysql_insert_id();
//在這裡更新id為$id的行的名字為李白
$sql="update user set name='李白' where id=$id limit 1";
mysql_query($sql);
//輸出更新數據條數
echo '數據更新行數:'.mysql_affected_rows();
mysql_query("delete from user where id='$id'");

11.9 關閉MySQL連接

當數據庫操作完成以後,可以使用mysql_close關閉數據庫連接,默認的,當PHP執行完畢以後,會自動的關閉數據庫連接。

mysql_close();

雖然PHP會自動關閉數據庫連接,一般情況下已經滿足需求,但是在對性能要求比較高的情況下,可以在進行完數據庫操作之後盡快關閉數據庫連接,以節省資源,提高性能。

在存在多個數據庫連接的情況下,可以設定連接資源參數來關閉指定的數據庫連接。

$link = mysql_connect($host, $user, $pass);
mysql_close($link);

<?php
//連接數據庫
$con=mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//在這裡關閉數據庫連接

mysql_close($con);

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved