У меня есть PHP-скрипт (функция mysqli), который генерирует insert into...
запросы как array of strings
и отправляет их в базу данных mysql один за другим. Проблема в том, что существует около 40000 запросов, и моя база данных всегда перестает вставлять новые после 1041 и вскоре позже закрывает соединение.
Это ограничение php или проблема с mysql? Или может быть что-то еще? Как я могу избежать этой проблемы и отправлять все запросы в базу данных?
Вот код:
$data // my array of strings - mysql queries
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);
$connection = mysqli_init();
mysqli_options ($connection, MYSQLI_CLIENT_SSL_VERIFY_SERVER_CERT, true);
mysqli_ssl_set($connection,'/usr/local/certs/client-key.pem',
'/usr/local/certs/client-cert.pem', '/usr/local/certs/server-ca.pem', NULL, NULL);
$link = mysqli_real_connect ($connection, $db['host'], $db['user'], $db['password'],
$db['dbName'], 3306, NULL,MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
if (!$link)
{
die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
}
else
{
foreach ($data as $index => $queryToSend) {
if($connection->query($queryToSend))
{
$this->output->writeln('succesfull query number: '.$index);
}
}
$connection->close();
}
Я думаю, вы должны попробовать пакетную вставку, это поможет вам преодолеть проблему, с которой вы сталкиваетесь.
Вот ссылка Как сделать пакетную вставку в MySQL
Измените время выполнения по умолчанию в файле php
ini_set ('max_execution_time', 120); //120 секунд
Я надеюсь, это поможет.