Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:15112 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 620 invoked by uid 1010); 20 Feb 2005 03:43:07 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 82560 invoked from network); 20 Feb 2005 02:57:46 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 20 Feb 2005 02:57:46 -0000 X-Host-Fingerprint: 212.227.126.183 moutng.kundenserver.de Received: from ([212.227.126.183:52580] helo=moutng.kundenserver.de) by pb1.pair.com (ecelerity HEAD (r4059)) with SMTP id 1B/2D-19278-04377124 for ; Sat, 19 Feb 2005 12:11:29 -0500 Received: from [212.227.126.207] (helo=mrelayng.kundenserver.de) by moutng.kundenserver.de with esmtp (Exim 3.35 #1) id 1D2Y8c-0004Od-00 for internals@lists.php.net; Sat, 19 Feb 2005 18:11:26 +0100 Received: from [62.224.10.50] (helo=p3EE00A32.dip0.t-ipconnect.de) by mrelayng.kundenserver.de with asmtp (Exim 3.35 #1) id 1D2Y8c-0000vZ-00 for internals@lists.php.net; Sat, 19 Feb 2005 18:11:26 +0100 Reply-To: internals@lists.php.net To: internals@lists.php.net Content-Type: text/plain Date: Sat, 19 Feb 2005 18:11:06 +0100 Message-ID: <1108833066.316.29.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.0.2 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit X-Provags-ID: kundenserver.de abuse@kundenserver.de auth:bf648c7cefcb4f7c0e2e63c674feb220 Subject: PDO/MySQL getColumnMeta() broken From: thekid@thekid.de (Timm Friebe) Hi, the following sourcecode: prepare('select * from entries where id = :id'); $stmt->bindParam(':id', $argv[4]); if (!$stmt->execute()) { var_dump($dbh->errorInfo()); exit; } for ($i= 0, $s= $stmt->columnCount(); $i < $s; $i++) { echo $i, ':: '; var_dump($stmt->getColumnMeta($i)); } ?> will print out: 1:: bool(false) 2:: bool(false) 3:: bool(false) 4:: bool(false) 5:: bool(false) 6:: bool(false) 7:: bool(false) 8:: bool(false) 9:: bool(false) 10:: bool(false) 11:: bool(false) 12:: bool(false) 13:: bool(false) 14:: bool(false) with no indication what went wrong. Actually, nothing went wrong, ext/pdo_mysql/mysql_statement.c just contains a bogus check (there doesn't need to be any current result data just to fetch result metadata). This fixes it: Index: ext/pdo_mysql/mysql_statement.c =================================================================== RCS file: /repository/php-src/ext/pdo_mysql/mysql_statement.c,v retrieving revision 1.14 diff -u -r1.14 mysql_statement.c --- ext/pdo_mysql/mysql_statement.c 13 Feb 2005 00:48:00 -0000 1.14 +++ ext/pdo_mysql/mysql_statement.c 19 Feb 2005 17:05:10 -0000 @@ -191,10 +191,10 @@ zval *flags; char *str; - if(S->current_data == NULL || !S->result) { + if (!S->result) { return FAILURE; } - if(colno >= mysql_num_fields(S->result)) { + if (colno >= mysql_num_fields(S->result)) { /* error invalid column */ pdo_mysql_error_stmt(stmt); return FAILURE; -- EOF -- (also contains CS fixes). -- Timm If it ain't broken, it doesn't have enough features yet