Проблема здесь не в том, что существует предел для каждого соединения для подготовленных операторов, а в том, что код без необходимости создает новые подготовленные операторы в цикле.
Вся идея подготовленных операторов заключается в повторном использовании. При выполнении нескольких операторов, которые являются структурно одинаковыми и отличаются только фактическими значениями, использование подготовленных операторов позволяет один раз проанализировать, проверить и оптимизировать структуру запроса и использовать ее снова и снова.
Вместо созданияподготовленный объект оператора для каждой вставки, гораздо лучше создать его один раз перед конструкцией вложенного цикла. И вместо вставки заключенных в кавычки и разделенных запятыми значений в строку SQL вместо использования переменных связывания можно повысить как скорость выполнения, так и безопасность оператора вставки.
Кроме того, после каждой вставки есть COMMIT
. Если это действительно необходимо, то лучше использовать соединение с автоматической фиксацией. Если это не требуется, COMMIT
следует отправлять только один раз после окончания цикла. Это не только вопрос производительности (COMMIT
s всегда синхронны - ваш код ждет этого), но и, возможно, половина вставленных записей.
Наконец, код использует два разных метода подключения $.db.getConnection
и $.hdb.db.connection
для создания двух отдельных объектов подключения. Для данного контекста это является ненужным и довольно запутанным. Достаточно просто использовать более новый $.hdb.db.connection
, и достаточно одного подключения.