首頁 > 後端開發 > php教程 > 如何使用 PDO_MYSQL 和 PDO_MYSQLND 在單一 PDO 語句中執行多個查詢?

如何使用 PDO_MYSQL 和 PDO_MYSQLND 在單一 PDO 語句中執行多個查詢?

Linda Hamilton
發布: 2024-12-24 07:10:17
原創
141 人瀏覽過

How Can I Execute Multiple Queries in a Single PDO Statement with PDO_MYSQL and PDO_MYSQLND?

PDO 支援使用PDO_MYSQL 和PDO_MYSQLND 進行多個查詢

雖然PDO 通常不允許在單一語句中進行多個查詢,但擴充PDO_MYSQL 和PDO_MYSQLNDND 提供了對擴充此的支援功能。

PDO_MYSQLND 已被取代PHP 5.3 中的 PDO_MYSQL,PDO_MYSQL 仍是 MySQL PDO 的預設驅動程式。要使用PDO 執行多個查詢,必須滿足以下要求:

  • PHP 版本5.3 或更高版本
  • 啟用MySQL Native Driver (mysqlnd)
  • 模擬準備語句,其中PDO::ATTR_EMULATE_PREPARES 設定為1(預設值MySQL)

使用exec()

exec() 方法可以在下列情況下執行多個查詢:

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);

$sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES ('car1', 'coupe'); INSERT INTO car(name, type) VALUES ('car2', 'coupe');";

$db->exec($sql);
登入後複製

此方法僅限於執行SQL 語句常數值。

使用準備好的語句

當資料來自PHP 變量,必須使用預準備語句:

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES (:car1, :type1); INSERT INTO car(name, type) VALUES (:car2, :type2);";

$stmt = $db->prepare($sql);
$stmt->execute(["car1" => "brand1", "type1" => "coupe", "car2" => "brand2", "type2" => "coupe"]);

while ($stmt->nextRowset()) {
    echo $db->lastInsertId(); // as an example
}
登入後複製

此方法允許透過行集迭代來進行錯誤檢查和收集查詢結果。

模擬預準備語句的注意事項

使用模擬準備語句時,請確保 DSN 中的編碼(自 PHP 5.3.6 起可用)與實際資料編碼相符。否則,某些編碼可能存在 SQL 注入的可能性。

以上是如何使用 PDO_MYSQL 和 PDO_MYSQLND 在單一 PDO 語句中執行多個查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板