PHP系列(十一)PHP操做mysql(i)數據庫

                                     Php操做Mysql數據庫】php

PHP腳本中操做MySQL數據庫的的六個步驟以下:html

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

2.選擇數據庫sql

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 ('王五','yc60.com@gmail.com',,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

PHPmysqli擴展提供了其先行版本的全部功能,此外,因爲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);

相關文章
相關標籤/搜索