では、MS Access データベース テーブルに MySQL クエリの結果を入力する必要があります。それはまったく難しいことではありません。テンプレート .mdb ファイルを一時名にコピーし、odbc 経由で開くプログラムを作成しました。今のところ問題ありません。
Access がバッチ挿入 ( ) をサポートしていないことに気付きましたVALUES (foo, bar), (second, query), (third query)
。つまり、行ごとに 1 つのクエリを実行する必要があります (数十万行になる可能性があります)。初期パフォーマンス テストでは、Access への 1 秒あたり約 900 の挿入率が示されています。私たちの最大のデータ セットでは、実行時間が数分になる可能性があります (これで終わりというわけではありませんが、明らかに速ければ速いほど良いのです)。
というわけで、プリペアドステートメントをテストしてみました。しかし、エラーが発生し続けます ( Warning: odbc_execute() [function.odbc-execute]: SQL error: [Microsoft][ODBC Microsoft Access Driver]COUNT field incorrect , SQL state 07001 in SQLExecute in D:\....php on line 30
)。
私が使用しているコードは次のとおりです (30 行目はodbc_execute
):
$sql = 'INSERT INTO table
([field0], [field1], [field2], [field3], [field4], [field5])
VALUES (?, ?, ?, ?, ?, ?)';
$stmt = odbc_prepare($conn, $sql);
for ($i = 200001; $i < 300001; $i++) {
$a = array($i, "Field1 $", "Field2 $i", "Field3 $i", "Field4 $i", $i);
odbc_execute($stmt, $a);
}
だから私の質問は2つあります。?
まず、なぜそのエラーが発生するのかについての考えはありますか (確認しましたが、配列内の数値は、パラメーターマーカーの数と一致するフィールド リストと一致します)。そして第二に、私はこれを気にするべきですか、それともまっすぐな INSERT ステートメントを使用するべきですか? 私が言ったように、時間は重要ではありませんが、可能であれば、その時間をできるだけ短くしたいと思います (繰り返しになりますが、900 オペレーション/秒はすでに高いため、ディスクのスループットによって制限される可能性があります)。 .
ありがとう