Bug #52891 [Opn->Asn]: Wrong data inserted with mysqli/mysqlnd when using bind_param,value>LONG_MAX
| From: | andrey@php.net | Date: | Mon, 20 Sep 2010 06:57:16 +0000 |
| Subject: | Bug #52891 [Opn->Asn]: Wrong data inserted with mysqli/mysqlnd when using bind_param,value>LONG_MAX | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-154502@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=52891&edit=1
ID: 52891
Updated by: andrey@php.net
Reported by: andrey@php.net
Summary: Wrong data inserted with mysqli/mysqlnd when using
bind_param,value>LONG_MAX
-Status: Open
+Status: Assigned
Type: Bug
Package: MySQLi related
Operating System: All
PHP Version: 5.3SVN-2010-09-20 (SVN)
-Assigned To:
+Assigned To: mysql
Block user comment: N
Previous Comments:
------------------------------------------------------------------------
[2010-09-20 08:56:45] andrey@php.net
Description:
------------
LONG_MAX is differs from platform to platform.
Because zval internally uses a signed long for integer fields when the
value in the script is over LONG_MAX, or under -LONG_MAX-1 then the
value is fit into a double. When using mysqli_stmt_bind_param with such
a value and "i" modifier then the value is converted back to long, which
results in incorrect results - like if the VALUE was LONG_MAX+1 the
result will be -1 (internally it is a signed long).
Test script:
---------------
CREATE TABLE tint(a bigint unsigned);
./php -r
'$c=mysqli_connect("127.0.0.1","root","root","test");$s=$c->prepare("insert
into tint
values(?)");$param=4294967295;$s->bind_param("i",$param);var_dump($s->execute());'
bool(true)
Expected result:
----------------
Don't bork the data. Check if the value can't be fit into a long, and if
this is the case use string to send to the server (changing the modifier
to "s" just for the next execution, preserve "i" for further
executions).
Actual result:
--------------
-1
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52891&edit=1