Встречается странная ошибка при выполнении MySQL-запроса с php:
PHP Warning: mysqli_query(): Premature end of data (mysqlnd_wireprotocol.c:967) in /ours/scripts/update-trending.php on line 97
PHP Warning: mysqli_query(): EOF packet 1 bytes shorter than expected in /ours/scripts/update-trending.php on line 97
Запрос прост и отлично работает, когда выполняется сам по себе:
mysql> select ifnull(count(nid),0) from likes where nid=18578;
+----------------------+
| ifnull(count(nid),0) |
+----------------------+
| 0 |
+----------------------+
1 row in set (0.03 sec)
Ошибка появляется во время цикла for, который перебирает значения nid (1-19000). Это работает на 98% запросов, но иногда происходит случайный сбой с вышеуказанной ошибкой. Все это происходит на одном соединении mysqli, так что это не проблема аутентификации.
Фактический используемый код (внутри цикла for):
$qLikesSQL='select ifnull(count(nid),0) from likes where nid=' . $thisNID;
if ($qLikesResulter=mysqli_query($link,$qLikesSQL)) {
if ($qLikesRow=mysqli_fetch_assoc($qLikesResulter))
{
$qLikes=$qLikesRow['ifnull(count(nid),0)'];
}
mysqli_free_result($qLikesResulter);
} else echo "MySQL query failed: $qLikesSQL\n";
Версия PHP:
PHP 7.0.28-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.28-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
Версия MySQL:
AWS RDS Instance - Aurora MySQL 5.7.12
Журналы ошибок MySQL генерируются:
2018-03-27T13:27:52.576966Z 7276977 [Note] Aborted connection 7276977 to db: '***snip***' user: '***snip***' host: '***snip***' (Got an error reading communication packets)
ОБНОВЛЕНИЕ: Я переместил базу данных из экземпляра RDS Aurora MySQL (5.7.12) в экземпляр RDS MySQL (5.7.16), и проблема исчезла. Так что, скорее всего, это что-то особенное для Авроры.
Задача ещё не решена.
Других решений пока нет …