|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
  [2020-11-16 11:28 UTC] w2kzx80 at gmail dot com
 Description:
------------
Hi
Im using php 7.4.10 and i cant simply upgrade it to 7.4.12 if im not sure it will resolve problem because its production server and situation is unique and its difficult to find another such situations. So for now while i found it im not changing nothing in server configuration till ill find answer.
First of all - this bug happen in some random cases but when it happen in some my part of code - it happen always.
Problem is in creating mysql requests using mysqli library. In some sql statements it creates problems like "Packets out of order. Expected 1 received 0". I noticed that it doesnt depend on mysql configuration because i have many same databases with same access and many same tables with same structure and all is same and all works but some sql statements return this error
ALSO what is very strange - i change sql request with adding one space and it start working. It mean that there is something basic wrong with networking in php
Test script:
---------------
//.... im connecting to db and so on and then
$la=$db->query('SELECT * FROM  `voipe_481`.`labels_auto`');
//here i put additional space between FROM and database name - and it works OK
$la=$db->query('SELECT * FROM `voipe_481`.`labels_auto`');
// here it write Warning and disconnects from server
//PHP Warning:  Packets out of order. Expected 1 received 0. Packet size=1
Expected result:
----------------
both sql requests must work fine
Actual result:
--------------
first sql request works fine, second crashes connection to database
Interesting is that im checking $db->ping before each request and it is ok but after second request it is false
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             | |||||||||||||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 16:00:01 2025 UTC | 
guys - I wrote You enough. Didnt You read? - Platform Linux - MySQL = MariaDB [(none)]> STATUS; -------------- mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1 SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 5.5.65-MariaDB MariaDB Server Protocol version: 10 Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 - i use mysqli library. Phpinfo shows mysqli Client API library version mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $ Compression supported Command buffer size 4096 Read buffer size 32768 Read timeout 31536000 Collecting statistics Yes Collecting memory statistics No Tracing n/a Loaded plugins mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password API Extensions mysqli,pdo_mysql - Which connection method was used = TCP/IP - Your table schema. (SHOW CREATE TABLE tbl_name) including charset used for connection and table storage. CREATE TABLE `labels_auto` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `label_id` int(11) DEFAULT NULL, `atype` char(1) DEFAULT NULL, `did` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8" - The character encoding of your file. Are you using UTF-8? Yes - Are you using utf8mb4 charset? Did you set the charset via `set_charset()` method? yes i used utf8 in set_charset - HEX dump of the query string producing the error. (There could be a hidden character there) I dont understand what You want from me... this query returns HEX("SELECT * FROM `voipe_481`.`labels_auto`") 53454C454354202A2046524F4D2060766F6970655F343831602E606C6162656C735F6175746F60 - HEX dump of the sample data causing the error. I dont understand.. query doesnt execute - something happen while query is compressed and sent to server and server doesnt recognize it - Self contained reproducible example. http://sscce.org/ should help you make such an example. Sorry - i dont have time for it I get You all the infoThats my "solution" in php - but OF COURSE - it is bad solution. But i cant wait till it will be fixed in mysql server so... maybe it will be useful for somebody $res = $db->query($query); if (!$res) $res=$db->query(preg_replace('/^([ ]*[^ ]+) (.+)$/uis','$1 $2',$query)); Thats it... It adds one additional space between first word of request and next part Like "SELECT * FROM table" -> "SELECT * FROM table" Unfortunately i cant detect some logical indications that some query will not be successful. Only this method with retry...