Re: Problem with PDO Mysql and FETCH::ASSOC

From: Date: Fri, 20 Mar 2009 09:44:40 +0000
Subject: Re: Problem with PDO Mysql and FETCH::ASSOC
References: 1  Groups: php.db 
Request: Send a blank email to php-db+get-46087@lists.php.net to get a copy of this message
Hello, I am using the following code to perform queries on a MySQL database: $dbh = new PDO($GLOBALS['database'],$GLOBALS['username'],$GLOBALS['password']); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = $dbh->prepare("SELECT * FROM log"); $query->execute(); $results = $query->fetchALL(PDO::FETCH_ASSOC); $dbh = null; If I perform this query in MySQL, I get: mysql> select * from log; +---------+------------+-------------------------------+----------+----------------+----------------------------+
| type    | date       | client_id                     | model_id | request        | message                    |
+---------+------------+-------------------------------+----------+----------------+----------------------------+ 
| message | 1.2375e+09 | domain.18052                  |          | client_start   | started client             |
However, if I perform this query with the PHP code above, I get: Array ( [type] => error [date] => 1.2375e+09 [log] => [distributed] => client_start [def] => started client) ) which is clearly wrong. 'distributed' is actually the name of the database, so I don't really know what it is doing as a key in the above result. If I use PDO::FETCH_BOTH instead of PDO::FETCH_ASSOC, I get Array ( [type] => message [0] => message [date] => 1.2375e+09 [1] => 1.2375e+09 [log] => [2] => domain.18052 [3] => [distributed] => client_start [4] => client_start [def] => started client [5] => started client ) which *does* contain the correct values with the numerical keys. Before using MySQL, I was using SQLite, and this problem did not occur. The description of the table is: mysql> describe log; +-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| type      | char(10) | YES  |     | NULL    |       |
| date      | float    | YES  |     | NULL    |       |
| client_id | char(50) | YES  |     | NULL    |       |
| model_id  | char(50) | YES  |     | NULL    |       |
| request   | char(20) | YES  |     | NULL    |       |
| message   | char(50) | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+ 6 rows in set (0.00 sec) Does anyone have any ideas as to what I might be doing wrong? Thanks for any help! Thomas
First of all check if you are actually connecting to the same database both times. Start with printing $GLOBALS['database'] and see if it connects where you really want. You mentioned a field "def" while printing the query's output which obviously is not included in the table's description. Have you changed the schema in the meantime? -- Thodoris

« previous php.db (#46087) next »