php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #38380 Large Numbers don't get sent properly in a prepared stmt
Submitted: 2006-08-08 13:28 UTC Modified: 2006-08-08 14:06 UTC
From: khalid at pixelcraze dot com Assigned:
Status: Not a bug Package: MySQLi related
PHP Version: 5.1.4 OS: FC4
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: khalid at pixelcraze dot com
New email:
PHP Version: OS:

 

 [2006-08-08 13:28 UTC] khalid at pixelcraze dot com
Description:
------------
When sending a large number (e.g. 10354520101202315) via a prepared stmt, the end result in MySQL is not correct.

MySQL 4.1.19


Reproduce code:
---------------
CREATE TABLE `test` (`number` bigint(20) NOT NULL default '0') ENGINE=MyISAM DEFAULT CHARSET=latin1

$db = &new MySQLi($host,$user,$pass,$dbname);
$stmt = $db->stmt_init();
$sql = "INSERT INTO test (number) VALUES (?)";
$stmt->prepare($sql);
$stmt->bind_param('d',$number);
$number = 10354520101202315;
$result = $stmt->execute();





Expected result:
----------------
Result in MySQL is 10354520101202316 - it should be 10354520101202315.

If I use a normal INSERT statement, then it works as expected. Changing the bind type to 's' then that works, but I have to change $number to 

$number = '10354520101202315';

Actual result:
--------------
MySQL reports number as 10354520101202316

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-08-08 14:06 UTC] tony2001@php.net
Floating point values have a limited precision. Hence a value might 
not have the same string representation after any processing. That also
includes writing a floating point value in your script and directly 
printing it without any mathematical operations.

If you would like to know more about "floats" and what IEEE
754 is read this:
http://docs.sun.com/source/806-3568/ncg_goldberg.html
 
Thank you for your interest in PHP.

$number = 10354520101202315; is not int, it's float.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 14:01:30 2024 UTC