Как запустить небуферизованный SELECT и тем временем запустить еще один INSERT? (Php, MYSQLI_USE_RESULT, команды не синхронизированы; вы не можете запустить эту команду сейчас)
Мне нужно фильтровать и добавлять записи из главной таблицы. В этой таблице миллионы записей. Сначала я пробовал:
$result = mysqli_query($myConnection, 'SELECT * FROM master');
while($record = mysqli_fetch_assoc($result))
{
if ($myConditionsMet)
{
mysqli_query($myConnection, 'INSERT INTO filtered VALUES blahblahblah');
}
}
Теперь первая проблема, с которой я столкнулся, это переполнение памяти. (Да, я раньше полагал, что обычно Php получает не все записи, а одну за другой, поэтому использование памяти минимально, поскольку одна запись стирает предыдущую, но человек всегда узнает что-то новое каждый день). Я наткнулся на полезный флаг (MYSQLI_USE_RESULT), так что:
$result = mysqli_query($myConnection, 'SELECT * FROM master', MYSQLI_USE_RESULT);
while($record = mysqli_fetch_assoc($result))
{
if ($myConditionsMet)
{
mysqli_query($myConnection, 'INSERT INTO filtered VALUES blahblahblah');
}
}
но на этот раз я получаю жалкую ошибку: Commands out of sync; you can't run this command now
. Пока не представляю, что с этим делать. Даже собираю в массив $ записи master, все равно переполнение памяти. Я не могу поверить, что мне не разрешено запускать INSERT INTO во время выборки с помощью SELECT FROM, я не могу понять, почему два столкновения, это не имеет смысла.