ID: 28912
User updated by: danielc at analysisandsolutions dot com
Reported By: danielc at analysisandsolutions dot com
-Status: Bogus
+Status: Open
Bug Type: MySQL related
Operating System: Windows 2000
PHP Version: 5CVS-2004-06-24 (dev)
New Comment:
Ah. Thanks for the clarification. Then
phpdoc/en/reference/mysqli/constants.xml needs updating.
You said:
varchar column definition returns MYSQLI_TYPE_VAR_STRING,
char column definition returns MYSQLI_TYPE_STRING.
Though the docs say:
MYSQLI_TYPE_STRING (integer) Field is defined as VARCHAR
MYSQLI_TYPE_CHAR (integer) Field is defined as CHAR
BUT, not so fast... CHAR columns return 253, but MYSQLI_TYPE_STRING's
value is 254. And MYSQLI_TYPE_CHAR is defined, but what's it for?
<?php
mysqli_query($db->connection,
'CREATE TABLE bar (Vf VARCHAR(5),'
. ' Cf CHAR(5))');
$r = mysqli_query($db->connection,
'SELECT Vf, Cf FROM bar');
$tmp = mysqli_fetch_field($r);
echo "$tmp->name type found = $tmp->type\n";
echo 'MYSQLI_TYPE_VAR_STRING = ' . MYSQLI_TYPE_VAR_STRING . "\n\n";
$tmp = mysqli_fetch_field($r);
echo "$tmp->name type found = $tmp->type\n";
echo 'MYSQLI_TYPE_STRING = ' . MYSQLI_TYPE_STRING . "\n\n";
echo "So, what's this for?...\n";
echo 'MYSQLI_TYPE_CHAR = ' . MYSQLI_TYPE_CHAR . "\n";
mysqli_query($db->connection,
'DROP TABLE bar');
?>
vvvvvvv OUTPUT vvvvvvvvvvvv
Vf type found = 253
MYSQLI_TYPE_VAR_STRING = 253
Cf type found = 253
MYSQLI_TYPE_STRING = 254
So, what's this for?...
MYSQLI_TYPE_CHAR = 1
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Previous Comments:
------------------------------------------------------------------------
[2004-06-28 23:48:20] [EMAIL PROTECTED]
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
varchar column definition returns MYSQLI_TYPE_VAR_STRING,
char column definition returns MYSQLI_TYPE_STRING.
------------------------------------------------------------------------
[2004-06-28 19:35:22] danielc at analysisandsolutions dot com
Documentation isn't involved. This is purely code. The "type"
property returned from the function != the value of the constant.
Perhaps your getting the right result is due to both of us running
different versions of the software? Here's what I'm on:
MySQL: Ver 14.5 Distrib 4.1.2-alpha, for Win95/Win98 (i32)
PHP: PHP 5.0.0-dev (cli) (built: Jun 28 2004 16:29:27)
------------------------------------------------------------------------
[2004-06-28 18:51:13] [EMAIL PROTECTED]
Looks like a documentation problem. However I couldn't
find this in documentation. Also the example output in
mysqli_fetch_field returns 254.
Could you please give me a link to the wrong
documentation?
------------------------------------------------------------------------
[2004-06-24 18:50:07] danielc at analysisandsolutions dot com
Description:
------------
The "type" value returned from mysqli_fetch_field() for a VARCHAR field
is 253. The manual says the constant for VARCHAR fields is
MYSQLI_TYPE_STRING which has a value of 254. So, there's no way to
determine column types via constants for VARCHAR's.
Reproduce code:
---------------
mysqli_query($db->connection,
'CREATE TABLE bar (Cf VARCHAR(5))');
$r = mysqli_query($db->connection,
'SELECT Cf FROM bar');
$tmp = mysqli_fetch_field($r);
echo "type found = $tmp->type\n";
echo 'MYSQLI_TYPE_STRING = ' . MYSQLI_TYPE_STRING . "\n";
mysqli_query($db->connection,
'DROP TABLE bar');
Expected result:
----------------
type found = 254
MYSQLI_TYPE_STRING = 254
Actual result:
--------------
type found = 253
MYSQLI_TYPE_STRING = 254
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=28912&edit=1