Edit report at http://bugs.php.net/bug.php?id=53483&edit=1

 ID:                 53483
 Updated by:         and...@php.net
 Reported by:        squarious at gmail dot com
 Summary:            using mysqli_stmt::send_long_data() makes execute()
                     fail
 Status:             Open
 Type:               Bug
 Package:            MySQLi related
 Operating System:   linux
 PHP Version:        5.3.3
 Block user comment: N
 Private report:     N

 New Comment:

libmysql + MySQL 5.0.90

and...@poohie:~PHP_5_3$ ./php a.php

OK: Executed prepared statement with blob less than max_allowed_packet.

OK: Executed prepared statement with blob bigger than
max_allowed_packet, sent at chunks.



libmysql + MySQL 5.5.8

and...@poohie:~/PHP_5_3$ ./php a.php

OK: Executed prepared statement with blob less than max_allowed_packet.

OK: Executed prepared statement with blob bigger than
max_allowed_packet, sent at chunks.


Previous Comments:
------------------------------------------------------------------------
[2010-12-20 15:55:06] and...@php.net

mysqlnd with MySQL 5.0.90



and...@poohie:~/PHP_5_3$ ./php a.php

OK: Executed prepared statement with blob less than max_allowed_packet.

Error executing prepared statement. Got a packet bigger than
'max_allowed_packet' bytes

------------------------------------------------------------------------
[2010-12-20 15:10:31] and...@php.net

with mysqlnd and MySQL 5.5.8 GA



and...@poohie:~/PHP_5_3$ ./php a.php

OK: Executed prepared statement with blob less than max_allowed_packet.

OK: Executed prepared statement with blob bigger than
max_allowed_packet, sent at chunks.



Seems there was a problem in 5.5.5

------------------------------------------------------------------------
[2010-12-08 16:24:53] and...@php.net

Looks a problem because of this MySQL Server bug 

http://bugs.mysql.com/bug.php?id=26824



After trying the script with 5.3.4-dev , libmysql from Ubuntu 9.10 and
mysqlnd, and two different MySQL versions 5.1.51 and 5.5.5-m3.



MySQL 5.1

libmysql : 

OK: Executed prepared statement with blob less than max_allowed_packet.

OK: Executed prepared statement with blob bigger than
max_allowed_packet, sent at chunks.



myslqnd:

OK: Executed prepared statement with blob less than max_allowed_packet.

and then few errors because of Packet out of order - an error packet
interleaving (see the MySQL bug description for more information)



MySQL 5.5

libmysql : 

OK: Executed prepared statement with blob less than max_allowed_packet.

Error executing prepared statement. Incorrect arguments to
mysqld_stmt_execute

mysqlnd:

OK: Executed prepared statement with blob less than max_allowed_packet.

Error executing prepared statement. Incorrect arguments to
mysqld_stmt_execute



This needs more investigation with wireshark, something changed in the
server but in any case there was a problem. Haven't checked with MySQL
5.0, as I don't have one handy.

------------------------------------------------------------------------
[2010-12-08 15:49:40] jbreton at kronostechnologies dot com

I am experiencing the same problem, but I'm starting to think it is
related to 

MySQL. 



I'm also using php5.3.3 and mysql5.1.49, but colleague is using php5.3.3
and 

mysql5.1.41 and your test passes without any problem.

------------------------------------------------------------------------
[2010-12-06 12:22:36] squarious at gmail dot com

Description:
------------
This bug was found from a framework test units after a system upgrade
(ubuntu/10.04 -> ubuntu/10.10). The bug was tracked that the
send_long_data() stopped working completely. If I try to use it for
large packets, the following execute() command will fail with error
"Error executing prepared statement. Incorrect arguments to
mysqld_stmt_execute".



I made a script that reproduces 100% the bug and I ran it at 

ubuntu/10.04(php5.3.2, mysql5.1.41) PASS,

ubuntu/10.10(php5.3.3, mysql5.1.49) FAIL,

debian/squeeze(php5.3.3, mysql5.1.49) FAIL.



So I assume its a regression at php's 5.3.3.

Test script:
---------------
//Full test @ http://codepad.org/eKnJnWnC 



// Code chunk that trigger the problem.

if (!$stmt->bind_param('b', $null))

        die("Error binding parameters. {$stmt->error}\n");

foreach(str_split($big_data, $max_allowed_packet) as $packet )

        if (!$stmt->send_long_data(0, $packet))

                die("Error sending long packet. {$stmt->error}\n");

if (!$stmt->execute())

        die("Error executing prepared statement. {$stmt->error}\n");

Expected result:
----------------
OK: Executed prepared statement with blob less than max_allowed_packet.

OK: Executed prepared statement with blob bigger than
max_allowed_packet, sent at chunks.



Actual result:
--------------
OK: Executed prepared statement with blob less than max_allowed_packet.

Error executing prepared statement. Incorrect arguments to
mysqld_stmt_execute


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53483&edit=1

Reply via email to