以下のようなコードを使用してmysql DBに挿入します(PDOを使用しています)。 目的は1つのクエリのみを使用してデータを挿入することでした。 残念ながら、PDOはbindValueやparamを使用しないため、PDOを使用する目的が無効になります。私はコードが安全であるように書くが、不要なクエリは避けたい。 誰もこれを行う方法をお勧めできますか?不要なクエリを回避しながらPDOを使用してこれを行うより安全な方法はありますか?
注1:セット内の質問の数は、プログラムにアクセスするたびに変わる可能性があります(実行するたびに$totalQ
が異なる場合があります)。
try
{
for ($i=0; $i<$totalQ; $i++)
{
$stqid[$i][0]=$lastInsertValue; //instance PDO::PARAM_INT
$stqid[$i][1]=$jqid[$i][0]; //question number PDO::PARAM_INT
$stqid[$i][2]=$jqid[$i][5]; //result PDO::PARAM_INT
$stqid[$i][3]=$jqid[$i][3]; //question start PDO::PARAM_STR
$stqid[$i][4]=$jqid[$i][4]; //question finish PDO::PARAM_STR
}
$values = array();
foreach ($stqid as $rowValues)
{
foreach ($rowValues as $key => $rowValue)
{
$rowValues[$key] = $rowValues[$key];
}
$values[] = "(" . implode(', ', $rowValues) . ")";
}
$count = $dbh->exec("INSERT INTO results(instance, qid, result, start, finish) VALUES ".implode (', ', $values));
$dbh = null;
}
注2:開始と終了の時間形式でコンマが破文でエラーが発生する可能性があります。私はそれらを追加して、あなたが達成しようとしているものを見ることができます。
ご協力いただければ幸いです。ありがとう。
編集:私はクリスの答えを選んだが、Alix Axelは彼の助言に非常に感謝している。それは、多くの助け、ありがとう!
あなたはあなたが必要なだけのプレースホルダを追加して、ちょうどプリペアドステートメントを使用して、ちょうど別の値でそれを実行しないのはなぜ、それら – zerkms
に値をバインドすることができますか?私はこれをテストしていませんが、パフォーマンスの影響はそれほど劇的ではないと思います。私は間違っているかもしれない。 –
私はPDOに本当に苦労します。おそらく例にリンクできますか? – TryHarder