ホームページ >バックエンド開発 >PHPチュートリアル >PDO_MYSQL と PDO_MYSQLND は 1 つのステートメントで複数の SQL クエリを実行できますか?

PDO_MYSQL と PDO_MYSQLND は 1 つのステートメントで複数の SQL クエリを実行できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-23 13:22:54971ブラウズ

Can PDO_MYSQL and PDO_MYSQLND Execute Multiple SQL Queries in One Statement?

複数のクエリに対する PDO サポート (PDO_MYSQL、PDO_MYSQLND)

PDO は 1 つのステートメントで複数のクエリをサポートしていないと認識されていますが、PDO_MYSQL と PDO_MYSQLND はこの機能を提供します。

PDO_MYSQL およびPDO_MYSQLND

PDO_MYSQL は、PHP 5.3 では PDO_MYSQLND に置き換えられました。紛らわしいことに、名前は PDO_MYSQL のままですが、PDO_MYSQLND が MySQL PDO のデフォルトのドライバーです。

複数のクエリを実行する方法

複数のクエリを同時に実行するには、次の要件を満たす必要があります。

  • PHP 5.3 または後で
  • mysqlnd 拡張機能
  • エミュレートされたプリペアド ステートメント (PDO::ATTR_EMULATE_PREPARES を 1 に設定。これは MySQL のデフォルトです)

複数のクエリを実行するメソッド

使用中exec:

$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', 'coupe'); 
INSERT INTO car(name, type) VALUES ('car2', 'coupe');";

$db->exec($sql);

ステートメントの使用:

$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"]);

// Check for errors and collect query results
do {
    echo $pdo->lastInsertId(); // for example
} while ($stmt->nextRowset());

注: エミュレートされた準備済みステートメントを使用する場合は、適切なエンコーディングを設定してください潜在的な SQL インジェクションの脆弱性を回避するために DSN に追加します。

以上がPDO_MYSQL と PDO_MYSQLND は 1 つのステートメントで複数の SQL クエリを実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。