MySQL: ошибка при отправке пакета QUERY. ПИД = 2

0

Я пытаюсь выполнить очень простой запрос, чтобы удалить одну строку. "max_allowed_packet" равен "1073741824", поэтому я смущен, почему я получаю

Error while sending QUERY packet. PID=2

Я выбираю только 25 строк из таблицы для отправки своих данных через sms и sleep (1) после удаления строки.

Запрос:

$stmt = $db->prepare("select * from sms limit 25");
$stmt->execute();

Я прохожу через строки здесь и отправляю данные строки через sms, а затем удаляю их

$q = $db->prepare("delete from sms where id = '$r[id]'");
$q->execute();
sleep(1)

Но иногда (иногда иногда не каждый раз) я получаю эту ошибку, и строка не удаляется, поэтому сообщение sms отправляется так много раз одному пользователю, поскольку он все еще находится в таблице. Любые идеи для решения этой проблемы?

Заранее спасибо.

  • 0
    Примечание, не связанное с проблемой, но полезная информация: SQL - это неупорядоченный набор данных. SQL также не гарантирует, что выполнение запроса select * from TABLE limit 25 даст те же результаты без использования ORDER BY ..
  • 0
    То, что вы пытаетесь сделать точно ... Поскольку вы "запутываете" имена таблиц, трудно увидеть, используете ли вы одну таблицу или две таблицы. Предоставьте структуру таблицы, некоторые примеры записей разместите ее на sql-fiddle.com или db-fiddle.com, также нам нужны ожидаемые результаты в виде таблицы ascii (в текстовом формате), и было бы неплохо больше кода PHP.
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

Когда вы используете шаблон, подобный

prepare mysql query a
execute mysql query a
for each row in result set a
    prepare mysql query b
    execute mysql quer b

вы должны использовать отдельное соединение db для запроса mysql b. Зачем? query a все еще может использовать свое соединение, пока вы читаете строки из своего набора результатов.

  • 0
    То есть вы имеете в виду открыть соединение подготовить выполнить сохранить значение идентификатора в параметре закрыть соединение снова открыть то же соединение подготовить снова выполнить закрытие подключения ??
  • 0
    открыть соединение подготовить и выполнить, если сообщение отправлено открыть новое соединение подготовить выполнить закрыть внутреннее соединение продолжить цикл

Ещё вопросы

Сообщество Overcoder
Наверх
Меню