Как запустить небуферизованный SELECT и запустить еще один INSERT? (Php, MYSQLI_USE_RESULT, Команды не синхронизированы; вы не можете запустить эту команду сейчас) - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно отфильтровать и добавить записи из основной таблицы. В этой таблице миллионы записей. Сначала я пытался:

$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. Пока я не представляю, что с этим делать. Даже я собираю в массив $ записи мастера, по-прежнему переполнение памяти. Я не могу поверить, что мне не разрешено запускать INSERT INTO при загрузке с помощью SELECT FROM, я не могу понять, почему два столкновения, это не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...