PHP的PDO基本操作

?喜歡請點個贊吧?

PDO與Mysqli的區(qū)別

PHP 5 及以上版本建議使用以下方式連接 MySQL :

MySQLi extension?("i" 意為 improved)

PDO (PHP Data Objects)

PDO 應用在 12 種不同數(shù)據(jù)庫中, MySQLi 只針對 MySQL 數(shù)據(jù)庫。

二者都支持預處理語句,可防止SQL注入。


PDO連接Mysql數(shù)據(jù)庫

代碼示例:

<?php

$servername = "localhost";

$username = "username";

$password = "password";

try {? ?

$pdo = new PDO("mysql:host=$servername;", $username, $password);//連接數(shù)據(jù)庫并創(chuàng)建PDO對象?

? ? echo "連接成功";

}

catch(PDOException $e)

{? ?

echo $e->getMessage();//捕獲異常并處理

}

?>

PDO的數(shù)據(jù)源 dsn:

連接一個數(shù)據(jù)庫最重要的四個參數(shù):數(shù)據(jù)庫地址、數(shù)據(jù)庫名稱、用戶名、密碼

由于pdo支持多種類型的數(shù)據(jù)庫,因此我們將數(shù)據(jù)庫類型、地址、名稱封裝在數(shù)據(jù)源dsn中

$dsn="{數(shù)據(jù)庫類型}:host={數(shù)據(jù)庫地址};dbname={數(shù)據(jù)庫名稱}";

連接數(shù)據(jù)庫并創(chuàng)建PDO對象:

?new PDO(數(shù)據(jù)源, 用戶名,密碼);



使用PDO 增刪改數(shù)據(jù)

$sql="INSERT INTO 表名稱 VALUES (值1, 值2,....)";

$num=$pdo -> exec($sql);//使用exec語句執(zhí)行SQL語句,返回受影響的行數(shù)。

$insertId=$pdo ->lastInsertId();?//PDO::lastInsertId — 返回最后插入行的ID或序列值

if($number>0){

? ? print'成功添加了’ .$num.'條記錄,新增主鍵id是:'.$insertId;

}



使用PDO查詢數(shù)據(jù)

使用PDO::query()獲取結(jié)果集;

查詢結(jié)果放在PDOStatement對象中;

查詢單條記錄:$result->fetch()

獲取所有記錄:$result->fetchAll()

直接遍歷結(jié)果集:foreach($result as $row){ }

將結(jié)果集映射到對象再遍歷:類名與表名一致,屬性與字段名一致,通過? _get() 魔術(shù)方法實現(xiàn)查詢

fetch查詢單條記錄

setFetchMode(PDO::FETCH_ASSOC) 讀取模式: 從結(jié)果集中獲取以列名為索引的關(guān)聯(lián)數(shù)組

PDOStatement::fetch()解析結(jié)果集

PDOStatement類中的fetch()方法可以將結(jié)果集中當前的記錄以某種方式返回,并將結(jié)果集指針移至下一行,當?shù)竭_結(jié)果集末尾時返回FALSE

$sql="SELECT 列名稱 FROM 表名稱"

$result=$pdo->query($sql);

if($result && $result->rowCount()){

? ? $result->setFetchMode(PDO::FETCH_ASSOC);

? ? $row = $result->fetch();

????echo'$row['字段名1']';

? ??echo'$row['字段名2']';

? ? }

fetchAll 查詢?nèi)坑涗?/h2>

fetchAll()方法與上一個方法fetch()類似,但是該方法只需要調(diào)用一次就可以獲取結(jié)果集中的所有行,并賦給返回的數(shù)組(二維)

$result->setFetchMode(PDO::FETCH_ASSOC);

$rows=$result->fetchAll();//將結(jié)果集轉(zhuǎn)為二維數(shù)組

foreach ($rows as $row){

????echo'$row['字段名1']';

????echo'$row['字段名2']';? ?

}??

也可跳過fetch解析,直接操作結(jié)果集

$result->setFetchMode(PDO::FETCH_ASSOC);?

$foreach ($result as $row){?

}

使用模型映射的方式處理結(jié)果集

PDO::FETCH_CLASS?返回一個請求類的新實例,映射結(jié)果集中的列名到類中對應的屬性名

class student

{

? ? private $name;

? ? private $id;

? ? ? ? public function __get($propertyName)

{????

? ? return $this -> $propertyName ;

}

}

$result->setFetchMode(PDO::FETCH_CLASS,’student');?


PDO預處理語句

將靜態(tài)SQL語句與動態(tài)數(shù)據(jù)分離,在SQL語句中使用占位符"?"或":字段名"

PDO::prepare()準備預處理語句;

execute([真實替換數(shù)據(jù)])執(zhí)行預處理語句

占位符":字段名"

$sql="SELECT 字段名1=:字段名1, 字段名2=:字段名2? FROM 表名稱";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(":字段名1", $value1);

$stmt->bindParam("?:字段名2?", $value2);?

//給變量賦值

$stmt->execute();

占位符"?"

$sql=?"SELECT ?, ?? FROM 表名稱";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(1, $value1);

$stmt->bindParam(2, $value2);?

//給變量賦值

$stmt->execute();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容