ID: 35103
User updated by: php at pjberkel dot com
Reported By: php at pjberkel dot com
Status: Open
Bug Type: MySQLi related
Operating System: *
PHP Version: 5.1CVS-2005-12-02 (cvs)
Assigned To: andrey
New Comment:
Additionally, it appears that mysqli_stmt_bind_param() suffers from the
same unsigned integer problem as mysqli_stmt_bind_result() when there
bind type is set to "i" and the actual bind data is > MAX_UNSIGNED_INT
on a 32 bit platform.
Below is an example of the bug using php5.1-200512020130 and
mysql-5.0.16 on RHEL 4 (intel):
Reproduce code:
---------------
<?php
$mysqli = new mysqli("host", "user", "pass", "db");
$mysqli->query("CREATE TABLE temp (id INT UNSIGNED NOT NULL)");
$mysqli->query("INSERT INTO temp (id) VALUES
(3000000897),(3800001532),(3900002281),(3100059612)");
$id_val = 3900002281;
/* BEGIN EXAMPLE OF BUG */
$stmt = $mysqli->prepare("SELECT id FROM temp WHERE id = ?");
$stmt->bind_param("i", $id_val);
$stmt->execute();
$stmt->bind_result($id);
$stmt->fetch();
var_dump($id);
$stmt->close();
/* END EXAMPLE OF BUG */
$mysqli->query("DROP TABLE temp");
$mysqli->close();
?>
Expected result:
----------------
string(10) "3000000897"
Actual result:
--------------
int(0)
Interestingly, if the bind type in $stmt->bind_param() is changed to
"d" the above reproduce code works as expected.
Previous Comments:
------------------------------------------------------------------------
[2005-12-02 06:50:50] php at pjberkel dot com
I tested my original reproduce code using the lastest stable snapshot
available (php5.1-200512020130), but there appears to be another bug
(or feature) introduced because no output is being generated at all.
It appears as though $stmt->fetch() is returning NULL despite the fact
that it correcly bound the result set. I notice in the manual page
that mysqli_stmt_fetch() returns NULL when "No more rows/data exists or
data truncation occurred". Can anybody confirm this is a bug or
feature?
FYI I'm testing this with MySQL 5.0.16 on RHEL 4.
------------------------------------------------------------------------
[2005-11-30 17:26:36] [EMAIL PROTECTED]
This bug has been fixed in CVS.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
------------------------------------------------------------------------
[2005-11-21 21:52:34] [EMAIL PROTECTED]
I have a fix for this problem as well as speedup of the current code
that handles unsigned ints on 32bit but I will push it after 5.1.0 is
released because it's a bit too late in the release cycle.
------------------------------------------------------------------------
[2005-11-15 18:37:22] [EMAIL PROTECTED]
I am taking care of this problem.
Thanks!
------------------------------------------------------------------------
[2005-11-10 08:54:25] [EMAIL PROTECTED]
Andrey, really REALLY big ints don't work yet! :)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/35103
--
Edit this bug report at http://bugs.php.net/?id=35103&edit=1