[解決済み] PDO による複数クエリのサポート (PDO_MYSQL, PDO_MYSQLND)
質問
PDO が 1 つのステートメントで複数のクエリを実行することをサポートしないことは知っています。私はグーグルでPDO_MYSQLとPDO_MYSQLNDについて話しているいくつかの投稿を発見しました。
PDO_MySQL は他のどの伝統的なアプリケーションよりも アプリケーションであり、他のどの伝統的な アプリケーションです。従来の MySQL は単一の SQL クエリしか許可しません。PDO_MySQL では PDO_MySQL では、そのような制限はありません。 しかし、複数のクエリを注入される危険性があります。 複数のクエリを注入される危険性があります。
からです。 PDO と Zend Framework を使用した SQL インジェクションからの保護 (2010年6月; Julianによる)
PDO_MYSQL と PDO_MYSQLND は複数のクエリのサポートを提供しているようですが、それらに関する詳細な情報を見つけることができません。これらのプロジェクトは廃止されたのでしょうか。PDO を使用して複数のクエリを実行する方法は現在あるのでしょうか。
どのように解決するのですか?
知っている限りでは
PDO_MYSQLND
を置き換えた
PDO_MYSQL
に置き換えられました。紛らわしいのは、名前がまだ
PDO_MYSQL
. つまり、NDはMySQL+PDOのデフォルトドライバになっています。
全体として、複数のクエリを一度に実行するためには
- PHP 5.3 以上
- mysqlnd
-
エミュレートされたプリペアドステートメント。必ず
PDO::ATTR_EMULATE_PREPARES
に設定されていることを確認してください。1
(デフォルト) に設定されます。あるいは、プリペアド・ステートメントを使わずに$pdo->exec
を直接使用することもできます。
execを使用する
$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
// works regardless of statements emulation
$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);
ステートメントの使用
$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
// works not with the following set to 0. You can comment this line as 1 is default
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$sql = "
DELETE FROM car;
INSERT INTO car(name, type) VALUES ('car1', 'coupe');
INSERT INTO car(name, type) VALUES ('car2', 'coupe');
";
$stmt = $db->prepare($sql);
$stmt->execute();
メモです。
エミュレートされたプリペアドステートメントを使用する場合、適切なエンコーディング(実際のデータエンコーディングを反映したもの)を DSN (5.3.6以降で利用可能) で適切なエンコーディングを設定していることを確認してください。そうでない場合は が使用されている場合、SQL インジェクションの可能性があります。 .
関連
-
[解決済み】接続の取得に失敗しました: php_network_getaddresses: getaddrinfo failed: 名前またはサービスが不明
-
[解決済み] 整形されていない数値が発生しました。
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み】PDOでの行数カウント
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】空の配列要素を削除する
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。