#48724 [Opn]: getColumnMeta() doesn't return native_type for BIT, TINYINT and YEAR
| From: | an0nym at narod dot ru | Date: | Fri, 03 Jul 2009 16:30:12 +0000 |
| Subject: | #48724 [Opn]: getColumnMeta() doesn't return native_type for BIT, TINYINT and YEAR | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-139222@lists.php.net to get a copy of this message | ||
ID: 48724
User updated by: an0nym at narod dot ru
Reported By: an0nym at narod dot ru
Status: Open
Bug Type: PDO related
Operating System: *
PHP Version: 5.3.0
New Comment:
Poor MySQLi developers... they've managed to solve this problem without
specification.
Poor you... you've spent sooo many time for nothing developing this
function, which works in 35 of 38 cases - this stuff has no
specification! Wait for a specification - you have a good excuse!
Bye.
Previous Comments:
------------------------------------------------------------------------
[2009-07-03 16:17:20] uw@php.net
You are free to write a patch.
I refuse to work on stuff that has no specification and which may go
into any direction. That typically ends up in a backwards compatibility
nightmare, which in particular for an abstraction like PDO makes no
sense to me.
The patch may be rather simple. But watch out for different values
returned by different MySQL versions.
------------------------------------------------------------------------
[2009-07-03 15:39:20] an0nym at narod dot ru
> libmysql and mysqlnd behave the same way. If this is decided to be
considered as a bug it is not a mysqlnd bug.
I agree. This is not a libmysql or mysqlnd bug. This is a PDO (or
PDO_MySQL) bug.
------------------------------------------------------------------------
[2009-07-03 15:31:27] an0nym at narod dot ru
Tell me then, why MySQLi is OK with all the types while PDO is not?
Nevertheless, it is not just OK, but it is EQUAL in behaviour for all
the types except TINYINT, BIT and YEAR.
Don't tell me, please, MySQLi type and PDO native type refer to
different things. I'm almost sure they don't. At least they shouldn't.
<?php $PDO=new
PDO('mysql:host=localhost;dbname=test','anyone','anyone');
$PDO->exec("CREATE TABLE
test(
tinyint TINYINT NOT NULL
,smallint SMALLINT NOT NULL
,mediumint MEDIUMINT NOT NULL
,int INT NOT NULL
,bigint BIGINT NOT NULL
,decimal DECIMAL NOT NULL
,float FLOAT NOT NULL
,double DOUBLE NOT NULL
,bit BIT(1) NOT NULL
,date DATE NOT NULL
,datetime DATETIME NOT NULL
,timestamp TIMESTAMP NOT NULL
,time TIME NOT NULL
,year YEAR NOT NULL
,char CHAR(1) NOT NULL
,varchar VARCHAR(1) NOT NULL
,tinytext TINYTEXT NOT NULL
,text TEXT NOT NULL
,mediumtext MEDIUMTEXT NOT NULL
,longtext LONGTEXT NOT NULL
,binary BINARY(1) NOT NULL
,varbinary VARBINARY(1) NOT NULL
,tinyblob TINYBLOB NOT NULL
,mediumblob MEDIUMBLOB NOT NULL
,blob BLOB NOT NULL
,longblob LONGBLOB NOT NULL
,enum ENUM('') NOT NULL
,set SET('') NOT NULL)");
$PDO->exec('INSERT INTO test(tinyint) VALUES(0)');
$PDO_statement=$PDO->query('SELECT * FROM test');
$PDO_fields=array();
for($i=0,$n=$PDO_statement->columnCount();$i<$n;++$i){
$PDO_fields[]=$PDO_statement->getColumnMeta($i);
}
$MySQLi=new mysqli('localhost','anyone','anyone','test');
$MySQLi_result=$MySQLi->query('SELECT * FROM test');
$MySQLi_fields=$MySQLi_result->fetch_fields();
$bug_fields=array();
for($i=0,$n=count($PDO_fields);$i<$n;++$i){
if(!isset($PDO_fields[$i]['native_type'])
or
constant('MYSQLI_TYPE_'.$PDO_fields[$i]['native_type'])!=$MySQLi_field
s[$i]->type){
$bug_fields[]=$PDO_fields[$i]['name'];
}
}
var_dump($bug_fields);
$PDO->exec('DROP TABLE test'); ?>
------------------------------------------------------------------------
[2009-07-03 14:29:33] uw@php.net
According to the test behaviour is not to set for certain types. This
is what you get.
------------------------------------------------------------------------
[2009-07-03 14:28:26] uw@php.net
libmysql and mysqlnd behave the same way. If this is decided to be
considered as a bug it is not a mysqlnd bug.
------------ libmysql -----------------------
nixnutz@ulflinux:~/src/login/php5> sapi/cli/php -i | grep -C5
pdo_mysql
PDO
PDO support => enabled
PDO drivers => mysql, sqlite, sqlite2
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => 5.1.35
pdo_sqlite
nixnutz@ulflinux:~/src/login/php5> sapi/cli/php -i | grep configure
Configure Command => './configure'
'--with-pdo-mysql=/usr/local/mysql/bin/mysql_config'
nixnutz@ulflinux:~/src/login/php5> sapi/cli/php pdo.php
int(0)
int(0)
object(PDOStatement)#2 (1) {
["queryString"]=>
string(36) "SELECT cbit,ctinyint,cyear FROM test"
}
array(6) {
["flags"]=>
array(0) {
}
["table"]=>
string(4) "test"
["name"]=>
string(5) "cyear"
["len"]=>
int(4)
["precision"]=>
int(0)
["pdo_type"]=>
int(2)
}
bool(false)
bool(false)
bool(false)
array(1) {
[0]=>
array(2) {
["VERSION()"]=>
string(6) "5.1.35"
[0]=>
string(6) "5.1.35"
}
}
------ mysqlnd --------------------
nixnutz@ulflinux:~/src/login/php5> sapi/cli/php -i | grep configure
Configure Command => './configure' '--with-pdo-mysql=mysqlnd'
'--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--enable-debug'
nixnutz@ulflinux:~/src/login/php5> sapi/cli/php -i | grep -C5
pdo_mysql
PDO
PDO support => enabled
PDO drivers => mysql, sqlite, sqlite2
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27
$
Persistent cache => enabled
put_hits => 0
--
size => 2000
free_items => 2000
references => 2
Directive => Local Value => Master Value
pdo_mysql.cache_size => 2000 => 2000
pdo_mysql.debug => no value => no value
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.6.16
nixnutz@ulflinux:~/src/login/php5> sapi/cli/php pdo.php
int(0)
int(0)
object(PDOStatement)#2 (1) {
["queryString"]=>
string(36) "SELECT cbit,ctinyint,cyear FROM test"
}
array(6) {
["pdo_type"]=>
int(2)
["flags"]=>
array(0) {
}
["table"]=>
string(4) "test"
["name"]=>
string(5) "cyear"
["len"]=>
int(4)
["precision"]=>
int(0)
}
bool(false)
bool(false)
bool(false)
array(1) {
[0]=>
array(2) {
["VERSION()"]=>
string(6) "5.1.35"
[0]=>
string(6) "5.1.35"
}
}
------------------------------------------------------------------------
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/48724
--
Edit this bug report at http://bugs.php.net/?id=48724&edit=1