【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】
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);