在PHP腳本中,通過PDO執行SQL查詢與數據庫進行交互,可以分爲三種不同的策略,使用哪一種方法取決於你要做什麼操作。
1、使用PDO::exec()方法
當執行INSERT、UPDATE和DELETE等沒有結果集的查詢時,使用PDO對象中的exec()方法去執行。該方法成功執行後,將返回受影響的行數。注意,該方法不能用於SELECT查詢。示例如下所示:
<?php
try {
$pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->exec('set names "utf8"');
} catch (PDOException $e) {
exit("數據庫連接失敗: ".$e -> getMessage());
}
$sql = "UPDATE contactInfo SET phone='15801680168' where name='高某某'";
//使用exec()方法可以執行INSERT、UPDATE、DELETE等
$affected = $pdo->exec($sql);
if ($affected) {
echo "數據表中受影響的行數爲: ".$affected;
} else {
print_r($pdo->errorInfo());
}
?>
2、使用PDO::query()方法
當執行返回結果集的SELECT查詢時,或者所影響的行數無關緊要時,應當使用PDO對象中的query()方法。如果該方法成功執行指定的查詢,則返回一個PDOStatement對象。如果使用了query()方法,並想了解獲取的數據行總數,可以使用PDOStatement對象中的rowCount()方法獲取。示例代碼如下所示:
<?php
try {
$pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->exec('set names "utf8"');
} catch (PDOException $e) {
exit("數據庫連接失敗: ".$e -> getMessage());
}
$sql = "SELECT name, phone, email FROM contactInfo WHERE departmentId='D01'";
try {
//執行SELECT查詢,並返回PDOstatement對象
$pdostatement = $pdo->query("$sql");
echo "一共從表中獲取到".$pdostatement->rowCount()."條記錄:n";
//利用循環輸出
foreach ($pdostatement as $row) {
echo $row['name'] . "t"; //輸出從表中獲取到的聯繫人的名字
echo $row['phone'] . "t"; //輸出從表中獲取到的聯繫人的電話
echo $row['email'] . "n"; //輸出從表中獲取到的聯繫人的電子郵件
}
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
3、使用PDO::prepare()和PDOStatement::execute()兩個方法
當同一個查詢需要多次執行時(有時需要迭代傳入不同的列值),使用預處理語句的方式來實現效率會更高。使用預處理語句就需要使用PDO對象中的prepare()方法去準備一個將要執行的查詢,再使用PDOStatement對象中的execute()方法來執行。