Хорошо, поэтому мне нужно заполнить таблицу базы данных 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 операций в секунду уже высоки). .
Спасибо