LAMP原理架構解析(二):Php操作Mysql數據庫

Php操作Mysql數據庫


目錄

1.PHP腳本操作數據庫6步驟

2.PHP連接mysql

3.PHP對數據庫增刪改查

4.PHP常用其他函數

5.php連接mysql(i)

  5.1 建立和斷開連接

  5.2 處理連接錯誤

  5.3 與數據庫交互


一.在PHP腳本操作數據庫6步驟

1.連接MySQL數據庫服務器並判斷是否連接正確

2.選擇數據庫

3.設置字符集

4.準備SQL語句併發送SQL語句到MySQL服務器並獲取記錄集

5.處理結果集

6.釋放結果集資源,關閉數據庫連接


二.PHP連接到MySQL

<?php

//我們全面採用UTF-8 編碼。

header('Content-Type:text/html;charset=utf-8');

//連接MySQL

$conn = @mysql_connect(DB_HOST,DB_USER,DB_PASSWORD)or die('數據庫連接失敗!錯誤信息:'.mysql_error());

//數據庫連接參數,可以用常量存儲,這樣就不能修改,更加安全。

define('DB_USER','root');

define('DB_PASSWORD','yangfan');

define('DB_HOST','localhost');

define('DB_NAME' ,'school');

//選擇你所需要的數據庫

@mysql_select_db(DB_NAME) or die('數據庫找不到!錯誤信息:'.mysql_error());

//設置字符集,如果是GBK,直接設置SET NAMES GBK 即可

@mysql_query('SET NAMES UTF8') or die('字符集設置錯誤');

//獲取記錄集

$query = "SELECT * FROM grade";

$result = @mysql_query($query) or die('SQL 語句有誤!錯誤信息:'.mysql_error());

//輸出一條記錄

print_r(mysql_fetch_array($result,MYSQL_ASSOC));

//釋放結果集資源

mysql_free_result($result);

//關閉數據庫

mysql_close($conn);

?>


三.增刪改查

1、新增數據

<?php

$query = "INSERT INTO grade (name,email,point,regdate)VALUE ('王五','[email protected]',,NOW())";

@mysql_query($query) or die('添加數據出錯:'.mysql_error());

?>

2、修改數據

<?php

$query = "UPDATE grade SET name='小可愛' WHERE id=6";

@mysql_query($query) or die('修改出錯:'.mysql_error());

?>

3、刪除數據

<?php

$query = "DELETE FROM grade WHEREid=6";

@mysql_query($query) or die('刪除錯誤:'.mysql_error());

?>

4、顯示數據

<?php

$query = "SELECT id,name,email,pointFROM grade";

$result = @mysql_query($query) or die('查詢語句出錯:'.mysql_error());

while (!!$row = mysql_fetch_array($result)) {

echo$row['id'].'----'.$row['name'].'----'.$row['email'].'----'.$row['point'];

echo '<br />';

}

?>


四.其他常用函數

    結果集取出來的函數:

mysql_fetch_assoc() 函數從結果集中取得一行作爲關聯數組。

mysql_fetch_row() 函數從結果集中取得一行作爲索引數組。

mysql_fetch_array() 函數從結果集中取得一行作爲關聯數組,或數字數組,或二者兼有

mysql_num_rows()函數返回結果集中行的數目。

mysql_fetch_row():從結果集中取得一行作爲枚舉數組

mysql_fetch_array(): 從結果集中取得一行作爲關聯數組,或數字數組,或二者兼有

mysql_fetch_lengths (): 取得結果集中每個輸出的長度

mysql_field_name(): 取得結果中指定字段的字段名

mysql_num_rows(): 取得結果集中行的數目

mysql_num_fields():取得結果集中字段的數目

mysql_get_client_info(): 取得MySQL 客戶端信息

mysql_get_host_info(): 取得MySQL 主機信息

mysql_get_proto_info(): 取得MySQL 協議信息

mysql_get_server_info(): 取得MySQL 服務器信息


五.php連接 mysqli

    PHP的mysqli擴展提供了其先行版本的所有功能,此外,由於MySQL已經是一個具有完整特性的數據庫服務器,這爲PHP又添加了一些新特性。而mysqli恰恰也支持了這些新特性。

一.建立和斷開連接

    與MySQL數據庫交互時,首先要建立連接,最後要斷開連接,這包括與服務器連接並選擇一個數據庫,以及最後關閉連接。與mysqli幾乎所有的特性一樣,這一點可以使用面向對象的方法來完成,也可以採用過程化的方式完成,具體如下:

    1.創建一個mysqli的對象

        $_mysqli = new mysqli();

    2.連接MySQL的主機、用戶、密碼、數據庫

        $_mysqli->connect('localhost','root','yangfan','guest');

    3.創建帶連接參數的mysqli對象

        $_mysqli = new mysqli('localhost','root','yangfan','guest');

    4.單獨選擇數據庫

        $_mysqli->select_db('testguest');

    5.斷開MySQL

        $_mysqli->close();

二.處理連接錯誤

    如果無法連接MySQL數據庫,那麼這個頁面不太可能繼續完成預期的工作。因此,一定要注意監視連接錯誤並相應地做出反應。Mysqli擴展包含有很多特性可以用來捕獲錯誤信息,例如:mysqli_connect_errno()和mysqli_connect_error()方法。mysqli_connect_errno()函數返回連接數據庫返回的錯誤號。Mysqli_connect_error()函數返回連接數據庫返回的錯誤代碼。

    if (mysqli_connect_errno()) {

        echo '數據庫連接錯誤,錯誤信息:'.mysqli_connect_error();

    exit();

    }

        errno屬性返回數據庫操作時的錯誤號。

        error屬性返回數據庫操作時的錯誤代碼。

    if ($_mysqli->errno) {

        echo '數據庫操作時發生錯誤,錯誤代碼是:'.$_mysqli->error;

    }

三.與數據庫進行交互

    絕大多數查詢都與創建(Creation)、獲取(Retrieval)、更新(Update)和刪除(Deletion)任務有關,這些任務統稱爲CRUD。

1.獲取數據

    網頁程序大多數工作都是在獲取和格式化所請求的數據。爲此,要向數據庫發送SELECT查詢,再對結果進行迭代處理,將各行輸出給瀏覽器,並按照自己的要求輸出。

//設置一下編碼utf8

$_mysqli->set_charset("utf8");

//創建一句SQL語句

$_sql = "SELECT * FROM tg_user";

//執行sql語句把結果集賦給$_result

$_result = $_mysqli->query($_sql);

//將結果集的第一行輸出

print_r($_result->fetch_row());

//釋放查詢內存(銷燬)

$_result->free();

2.解析查詢結果

    一旦執行了查詢並準備好結果集,下面就可以解析獲取到的結果行了。你可以使用多個方法來獲取各行中的字段,具體選擇哪一個方法主要取決於個人喜好,因爲只是引用字段的方法有所不同。將結果集放到對象中由於你可能會使用mysqli的面向對象的語法,所以完全可以採用面向對象的方式管理結果集。可以使用fetch_object()方法來完成。//將結果集包裝成對象

$_row = $_reslut->fetch_object();

//輸出對象中的一個字段(屬性)

echo $_row->tg_username;

//遍歷所有的用戶名稱

while (!!$_row = $_reslut->fetch_object()) {

echo $_row->tg_username.' <br /> ';

}

使用索引數組和關聯數組

//將結果集包裝成數組(索引+關聯)

$_row = $_reslut->fetch_array();

//輸出下標是3的字段(屬性)

echo $_row[3];

//將結果集包裝成索引數組

$_row = $_reslut->fetch_row();

echo $_row[3];

//將結果集包裝成關聯數組

$_row = $_reslut->fetch_assoc();

echo $_row['tg_username'];

3.確定所選擇的行和受影響的行

    通常希望能夠確定SELECT查詢返回的行數,或者受INSERT、UPDATE或DELET查詢影響的行數。我們可以使用num_rows

affected_rows兩個屬性

//當使用查詢時,想了解SELECT查詢了多少行,可以使用num_rows。

echo $_reslut->num_rows;

//當使用查詢時,想了解SELECT、INSERT、UPDATE、DELETE查詢時影響的行數,可以使用affected_rows;注意,它是$_mysqli下的屬性

echo $_mysqli->affected_rows;

4.移動指針的操作和獲取字段

    當你並不想從第一條數據開始獲取,或者並不想從第一個字段獲取,你可以使用數據指針移動或者字段指針移動的方式調整到恰當的位置。當然,你還可以獲取字段的名稱及其相關的屬性。//計算有多少條字段

echo $_reslut->field_count;

//獲取字段的名稱

$_field = $_reslut->fetch_field();

echo $_field->name;

//遍歷字段

while (!!$_field = $_reslut->fetch_field()) {

echo $_field->name.'<br />';

}

//一次性取得字段數組

print_r($_reslut->fetch_fields());

//移動數據指針

$_reslut->data_seek(5);

//移動字段指針

$_reslut->field_seek(2);

5.執行多條SQL語句

    有的時候,我們需要在一張頁面上同時執行多條SQL語句,之前的方法就是分別創建多個結果集然後使用。但這樣資源消耗很大,也不利於管理。PHP提供了執行多條SQL語句的方法$_mysqli->multi_query();

//創建多條SQL語句

$_sql .= "SELECT * FROM tg_user;";

$_sql .= "SELECT * FROM tg_photo;";

$_sql .= "SELECT * FROM tg_article";

//開始執行多條SQL語句

if ($_mysqli->multi_query($_sql)) {

//開始獲取第一條SQL語句的結果集

$_result = $_mysqli->store_result();

print_r($_result->fetch_array());

//將結果集指針移到下一個

$_mysqli->next_result();

$_result = $_mysqli->store_result();

print_r($_result->fetch_array());

$_mysqli->next_result();

$_result = $_mysqli->store_result();

print_r($_result->fetch_array());

} else {

echo 'sql語句有誤!';

}

6.執行數據庫事務

    事務(transaction)是作爲整個一個單元的一組有序的數據庫操作。如果一組中的所有操作都成功,則認爲事務成功,即使只有一個失敗操作,事務也不成功。如果所有操作成功完成,事務則提交(commit),其修改將作用於所有其他數據庫進程。如果一個操作失敗,則事務將回滾(rollback),該事務所有操作的影響都將取消。首先,您的MySQL是InnoDB或BDB引擎的一種,一般來說,你安裝了AppServ的集成

包,你選擇InnoDB的引擎的數據庫即可。如果你建立的表不是InnoDB,可以在phpmyadmin

裏修改。

//首先你必須關閉自動提交數據

$_mysqli->autocommit(false);

//創建一個SQL語句,必須同時運行成功,不能出現一個成功,一個失敗

$_sql .= "UPDATE tg_friend SETtg_state=tg_state+5 WHERE tg_id=1;";

$_sql .= "UPDATE tg_flower SETtg_flower=tg_flower-5 WHERE tg_id=1;";

//執行兩條SQL語句

if ($_mysqli->multi_query($_sql)) {

//獲取第一條SQL一影響的行數

$_success = $_mysqli->affected_rows == 1 ? true : false;

//下移,第二條SQL

$_mysqli->next_result();

//獲取第二條SQL影響的行數

$_success2 = $_mysqli->affected_rows == 1 ? true : false;

//判斷是否都正常通過了,兩個SQL

if ($_success &&$_success2) {

$_mysqli->commit();

echo '完美提交!';

} else {

$_mysqli->rollback();

echo '程序出現異常!';

}

} else {

echo "SQL語句有誤:".$_mysqli->errno.$_mysqli->error;

}

//最後還必須開啓自動提交

$_mysqli->autocommit(true);


本文出自 “Linux獄長” 博客,請務必保留此出處http://sswqzx.blog.51cto.com/2494644/1969832

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章