PHP系列(十一)PHP操作mysql(i)資料庫
【Php操作Mysql資料庫】
在PHP指令碼中操作MySQL資料庫的的六個步驟如下:
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 (`王五`,`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】
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);
本文轉自 sswqzx 51CTO部落格,原文連結:http://blog.51cto.com/sswqzx/1969832
相關文章
- PHP操作MySQL資料庫PHPMySql資料庫
- php簡單操作mysql資料庫的類PHPMySql資料庫
- PHP--資料庫基本操作PHP資料庫
- PHP筆記--資料庫操作PHP筆記資料庫
- PHP連線MySql資料庫PHPMySql資料庫
- PHP資料寫入MySql資料庫PHPMySql資料庫
- (轉)PHP連線資料庫之PHP連線MYSQL資料庫程式碼PHP資料庫MySql
- PHP 原生操作 Mysql 分頁資料案例PHPMySql
- PHP面試之三:MySQL資料庫PHP面試MySql資料庫
- PHP自學教程之MySQL資料庫PHPMySql資料庫
- PHP常用操作類實現——資料庫操作類PHP資料庫
- PHP系列(十二)資料庫抽象層pdoPHP資料庫抽象
- MySQL系列:資料庫基本操作(1)MySql資料庫
- 精PHP與MYSQL資料庫連線PHPMySql資料庫
- PHP連線、查詢MySQL資料庫PHPMySql資料庫
- php資料庫之mysql(where、orderBy、Update)PHP資料庫MySql
- php連線mysql資料庫基礎PHPMySql資料庫
- 簡單php連線資料庫作操作PHP資料庫
- [php]mysql操作流程PHPMySql
- php mysqli操作 mysqlPHPMySql
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- 在C、JAVA、PHP中操作postgreSql資料庫 (轉)JavaPHPSQL資料庫
- php實現mysql資料庫隨機重排例子PHPMySql資料庫隨機
- php連線mysql資料庫的幾種方法PHPMySql資料庫
- php操作JSON格式資料PHPJSON
- PHP系列(十)GD庫PHP
- php連結資料庫PHP資料庫
- MySQL 資料庫操作MySql資料庫
- php遠端連線mysql資料庫的步驟PHPMySql資料庫
- php面試題之五——MySQL資料庫(基礎部分)PHP面試題MySql資料庫
- php基礎之連線mysql資料庫和查詢資料PHPMySql資料庫
- MySQL入門系列:資料庫和表的基本操作MySql資料庫
- PHP中CakePHP新增資料庫PHP資料庫
- PHP 連線access資料庫PHP資料庫
- php連線多資料庫PHP資料庫
- PHP匯出資料庫方法PHP資料庫
- PHP如何使用GeoIP資料庫PHP資料庫
- PHP——連線資料庫初PHP資料庫