#34681 [Asn->Bgs]: MySQL double type loses trailing zeroes with mysqli prepared statements
ID: 34681
Updated by: georg@php.net
Reported By: adrian at fuzzee dot co dot uk
-Status: Assigned
+Status: Bogus
Bug Type: MySQLi related
Operating System: *
PHP Version: 5CVS-2005-09-29 (cvs)
Assigned To: georg
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
If you want to convert double value to a string, use MySQL
cast function: SELECT CAST(1.234 AS CHAR) FROM DUAL
While mysql_query uses a string based protocol (server
sends all values as string), prepared statements use
binary protocol, which was introduced in MySQL 4.1. That
means numeric values will be transferred in binary
representation and stored in PHP's corresponding data
types.
Previous Comments:
------------------------------------------------------------------------
[2005-09-30 11:11:12] sniper@php.net
I tested with these (mysql --version):
mysql Ver 14.7 Distrib 4.1.13, for pc-linux-gnu (i686) using readline
4.3
mysql Ver 14.7 Distrib 4.1.12, for pc-linux-gnu (i686) using readline
4.3
I don't know what you meant with 'client library version'.
------------------------------------------------------------------------
[2005-09-30 10:29:21] georg@php.net
Not enough information was provided for us to be able
to handle this bug. Please re-read the instructions at
http://bugs.php.net/how-to-report.php
If you can provide more information, feel free to add it
to this bug and change the status back to "Open".
Thank you for your interest in PHP.
What MySQL Version do you use, which client library version?
------------------------------------------------------------------------
[2005-09-29 17:54:30] sniper@php.net
By replacing the echo's with var_dump() calls, I get this:
float(0)
array(2) {
[0]=>
string(5) "0.000"
["number"]=>
string(5) "0.000"
}
So what you think is truncation is simply how PHP handles floats. Try
"echo 0.00;" for example.
Assigned to Georg since this seems really inconsistent behaviour first.
(perhaps just needs to be documented?)
------------------------------------------------------------------------
[2005-09-29 17:09:12] adrian at fuzzee dot co dot uk
Description:
------------
With mysqli statements, a MySQL double loses trailing zeroes, so
'0.000' becomes just '0' and '3.350' would become '3.35'.
However, if
you use regular mysqli queries (non prepared statements) the trailing
zeroes are preserved... Obviously not a fatal bug, but an odd
difference in behaviour.
Reproduce code:
---------------
$sql = "SELECT 0.000 as number";
$mysqli = new mysqli(...);
$stmt = $mysqli->prepare($sql);
$stmt->bind_result($number);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();
$stmt->close();
echo "$number\n";
$r = $mysqli->query($sql);
$tmp = $r->fetch_array();
echo "$tmp[0]\n";
Expected result:
----------------
0.000
0.000
Actual result:
--------------
0
0.000
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=34681&edit=1
Thread (5 messages)