|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2010-09-20 08:57 UTC] andrey@php.net
-Status: Open
+Status: Assigned
-Assigned To:
+Assigned To: mysql
[2010-09-22 13:38 UTC] andrey@php.net
[2010-09-22 14:18 UTC] andrey@php.net
-Status: Assigned
+Status: Closed
[2010-09-22 14:18 UTC] andrey@php.net
[2010-09-22 16:26 UTC] andrey@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 16:00:02 2025 UTC |
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