php中mysql_PHP中MySQL操作
本次使用的demo是MySQL的示例數(shù)據(jù)庫employees,
PHP中的demo代碼可以在
這里使用的是
一、連接數(shù)據(jù)庫
1.1、連接
打開一個(gè)到 MySQL 服務(wù)器的連接。有面向?qū)ο箫L(fēng)格和過程化風(fēng)格。
$link = mysqli_connect("localhost", "root", "123456", "employees");//面向過程
$link = new mysqli("localhost", "root", "123456", "employees");//面向?qū)ο?/p>
如果成功則返回一個(gè) MySQL 連接對(duì)象, 或者在失敗時(shí)返回 FALSE。
1.2、設(shè)置編碼
設(shè)置在數(shù)據(jù)庫間傳輸字符時(shí)所用的默認(rèn)字符編碼。
$link->query("SET NAMES utf8");//執(zhí)行語句
mysqli_set_charset($link, 'utf8');//面向過程
$link->set_charset('utf8');//面向?qū)ο?/p>
成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE。
二、查詢
2.1、對(duì)數(shù)據(jù)庫執(zhí)行一次查詢
$sql = 'select * from employees limit 10';$result = mysqli_query($link, $sql);//面向過程
$result = $link->query($sql);//面向?qū)ο?/p>
失敗時(shí)返回 FALSE,成功執(zhí)行SELECT, SHOW, DESCRIBE或 EXPLAIN查詢會(huì)返回一個(gè)對(duì)象,其他查詢則返回TRUE。
接下來的2和3就是根據(jù)
還有就是下面的所有方法都有面向過程和面向?qū)ο蟮姆绞?#xff0c;為了節(jié)省篇幅,下面例子都是面向?qū)ο蟮姆绞健?/p>
2.2、查詢記錄獲取
fetch_all、fetch_array、fetch_assoc與fetch_row,返回的是array。
fetch_fields、fetch_field、fetch_object與fetch_field_direct,返回是stdClass Object。
重置指針到起始,當(dāng)做fetch_fields、fetch_assoc等讀取數(shù)據(jù)的時(shí)候,指針會(huì)變化。
返回記錄數(shù)組,這個(gè)方法有可以傳遞一個(gè)參數(shù)resulttype,三個(gè)常量MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH。默認(rèn)是MYSQLI_NUM。
$data = $result->fetch_all(MYSQLI_ASSOC);
獲取所有結(jié)果行并返回結(jié)果集作為關(guān)聯(lián)數(shù)組,數(shù)字?jǐn)?shù)組,或兩者兼而有之。
下面的第一張返回結(jié)果圖,引用的參數(shù)是MYSQLI_ASSOC,第二張引用的參數(shù)是MYSQLI_NUM。其實(shí)就是key的不同。
返回一條記錄數(shù)組,或沒有記錄返回NULL。與fetch_all一樣,也有個(gè)參數(shù)resulttype,三個(gè)常量供選擇。默認(rèn)是MYSQLI_BOTH。
$data = $result->fetch_array(MYSQLI_ASSOC);
沒有resulttype參數(shù),返回的是一條關(guān)聯(lián)數(shù)組,或者沒記錄返回NULL。如果數(shù)組中包含相同的鍵名,那么將取最后一列。
同樣沒有resulttype參數(shù),返回的是一條數(shù)字?jǐn)?shù)組,或者沒有記錄返回NULL。
用此方法獲取表中所有的字段信息,包括字段名、字段長度、所屬表等。
返回多個(gè)對(duì)象的數(shù)組,如果沒有就返回FALSE。
與上面的方法相對(duì),只會(huì)獲取某一個(gè)字段信息。配合
返回一個(gè)對(duì)象的數(shù)組,如果沒有就返回FALSE。
$result->field_seek(1);$fields = $result->fetch_field();
注意上面的代碼,返回的將是第二個(gè)字段的信息。
可以傳入兩個(gè)參數(shù)class_name和params,返回一個(gè)關(guān)聯(lián)對(duì)象,如果沒有數(shù)據(jù)返回NULL。
可以傳入一個(gè)參數(shù)fieldnr,也就是字段的位置。效果等效于上面的
2.3、插入更新等信息獲取
employees表的主鍵原先不是自增長的,我后面改了下字段,目前表中有499999條數(shù)據(jù)。
$sql = "insert into employees(`birth_date`,`first_name`,`last_name`,`gender`,`hire_date`) values ('1988-10-9', 'pw', 'strick', 'M', '1988-10-9')";$result = $link->query($sql);var_dump($link->affected_rows);//受影響行數(shù)
var_dump($link->insert_id);//主鍵
//print_r(mysqli_error($link));//打印錯(cuò)誤信息
上面的$result返回的將是一個(gè)boolean值,而主鍵和影響行數(shù)是需要從mysqli對(duì)象中獲取。
三、預(yù)處理
3.1、添加更新等操作
預(yù)處理能有效的防止sql注入的產(chǎn)生,
$sql = "insert into employees(`birth_date`,`first_name`,`last_name`,`gender`,`hire_date`) values (?,?,?,?,?)";$stmt = $link->prepare($sql);//獲得預(yù)處理對(duì)象//bind_param中的第N個(gè)參數(shù),必須得用變量賦值
$birth_date = '1989-10-9';$first_name = 'pw2';$last_name = 'strick2';$gender = 'M';$hire_date = '1988-10-9';$stmt->bind_param('sssss', $birth_date, $first_name, $last_name, $gender, $hire_date);//綁定時(shí)使用變量綁定
//$stmt->bind_param('sssss', '1989-10-9', 'pw2', 'strick2', 'M', '1988-10-9');//不能使用這種方式
$stmt->execute();//執(zhí)行預(yù)處理
var_dump($stmt->insert_id);//主鍵
var_dump($stmt->affected_rows);//受影響行數(shù)
初始化一個(gè)預(yù)處理對(duì)象,傳入string類型的查詢語句。返回一個(gè)FALSE。
綁定預(yù)處理查詢語句中的變量。第一個(gè)參數(shù)是指定數(shù)據(jù)類型。
3.2、查詢
$sql = 'select * from employees limit ?';$stmt = $link->prepare($sql);$count = 10;$stmt->bind_param("i", $count);$stmt->execute();$result = $stmt->get_result();//結(jié)果集取后的操作就和之前一樣了
demo數(shù)據(jù)庫下載:
demo代碼下載:
參考資料:
總結(jié)
以上是生活随笔為你收集整理的php中mysql_PHP中MySQL操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超级冰翼邪神怎么配招
- 下一篇: angular6 mysql_Angul