Хорошо, поэтому мне нужно заполнить таблицу базы данных MS Access результатами из запроса MySQL.Это совсем не сложно.У меня есть программа, написанная туда, где она копирует файл .mdb шаблона во временное имя и открывает его через odbc.Пока проблем нет.
Я заметил, что Access не поддерживает пакетную вставку (VALUES (foo, bar), (second, query), (third query)
).Так что это означает, что мне нужно выполнить один запрос на строку (потенциально это сотни тысяч строк).Начальные тесты производительности показывают скорость около 900 вставок в секунду в Access.С нашими самыми большими наборами данных это может означать время выполнения минут (что не конец света, но, очевидно, чем быстрее, тем лучше).
Итак, я попытался протестировать подготовленный оператор.Но я продолжаю получать сообщение об ошибке (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);
}
Так что мой вопрос в два раза.Во-первых, есть ли идея, почему я получаю эту ошибку (я проверил, и число в массиве соответствует списку полей, который соответствует числу маркеров параметра ?
)?И во-вторых, я должен даже беспокоиться об этом или просто использовать прямые операторы INSERT?Как я уже сказал, время не критично, но если это возможно, я бы хотел, чтобы это время было как можно ниже (опять же, я могу быть ограничен пропускной способностью диска, так как 900 операций в секунду уже высоки) ...
Спасибо