[解決済み] PDO Preparedが1つのクエリで複数行を挿入する
2022-04-25 20:34:04
質問
現在、MySQLでこのタイプのSQLを使用して、1つのクエリで複数行の値を挿入しています。
INSERT INTO `tbl` (`key1`,`key2`) VALUES ('r1v1','r1v2'),('r2v1','r2v2'),...
PDOに関する読み物では、プリペアドステートメントを使用することで、スタティッククエリよりもセキュリティが高くなるはずです。
そこで、プリペアドステートメントを使用して、1つのクエリで複数行の値を挿入することが可能かどうかを知りたいのです。
もしそうなら、どのように実装すればよいか教えてください。
どのように解決するのですか?
PDOのプリペアドステートメントで複数値のインサート
1つのexecute文で複数の値を挿入する。なぜかというと、以下によると このページ は、通常の挿入よりも高速になります。
$datafields = array('fielda', 'fieldb', ... );
$data[] = array('fielda' => 'value', 'fieldb' => 'value' ....);
$data[] = array('fielda' => 'value', 'fieldb' => 'value' ....);
または、データを入力するループがあるはずです。
プリペアドインサートでは、挿入先のフィールドと、パラメータをバインドするためのプレースホルダを作成するためのフィールド数を知っておく必要があります。
insert into table (fielda, fieldb, ... ) values (?,?...), (?,?...)....
基本的にinsert文はこのような形にしたいのです。
さて、コードです。
function placeholders($text, $count=0, $separator=","){
$result = array();
if($count > 0){
for($x=0; $x<$count; $x++){
$result[] = $text;
}
}
return implode($separator, $result);
}
$pdo->beginTransaction(); // also helps speed up your inserts.
$insert_values = array();
foreach($data as $d){
$question_marks[] = '(' . placeholders('?', sizeof($d)) . ')';
$insert_values = array_merge($insert_values, array_values($d));
}
$sql = "INSERT INTO table (" . implode(",", $datafields ) . ") VALUES " .
implode(',', $question_marks);
$stmt = $pdo->prepare ($sql);
$stmt->execute($insert_values);
$pdo->commit();
私のテストでは、マルチプルインサートを使用した場合と、単一の値を持つ通常のプリペアドインサートを使用した場合の差は1秒しかありませんでしたが。
関連
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み] [Solved] Fatal error: メンバ関数 query() の null への呼び出し。
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] PDOのプリペアドステートメントは、SQLインジェクションを防ぐのに十分ですか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Notice: 非オブジェクトのプロパティを取得しようとしているエラー
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み】In_arrayが動作しない。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み] 致命的なエラーです。mysqli_result 型のオブジェクトを使用できません [終了] 。