ホームページ > バックエンド開発 > 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_MYSQL および PDO_MYSQLND による複数のクエリの PDO サポート

通常、PDO では 1 つのステートメント内で複数のクエリを許可しませんが、拡張機能 PDO_MYSQL および PDO_MYSQLND はこれをサポートします。

PDO_MYSQLND が置き換えられました。 PHP 5.3 の PDO_MYSQL 。PDO_MYSQL は MySQL PDO のデフォルト ドライバーとして残ります。 PDO で複数のクエリを実行するには、次の要件を満たす必要があります:

  • PHP バージョン 5.3 以降
  • MySQL ネイティブ ドライバー (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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート