PDO :: FETCH_ASSOC不返回正确的表列

时间:2011-10-07 03:14:17

标签: pdo

我是PHP的新手,我目前正在开发一个小型Web应用程序。下面是使用PDO的数据库查询的测试代码:

try 
{
    $dsn = "mysql:host=localhost;dbname=auction";
    $opt = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
    );
    $pdo = new PDO($dsn, 'root', 'password', $opt);
}

catch(PDOException $e)
{
    echo $e->getMessage();
}

$stmt = $pdo->query("SELECT id,username,password,name,level FROM users");
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$test = $stmt->fetchALL();
print_r($test);

所述代码的输出如下:

Array ( [0] => Array ( [id] => 1 [username] => admin [users] => Administrator [auction] => 0 ) 
        [1] => Array ( [id] => 2 [username] => jodel [users] => Jodel Ross [auction] => 1 ) ) 

我很困惑,因为从我的观点来看,上面的代码应该给出一个关联数组,其索引是返回结果集的列,即id,username,password,name,level。但事实并非如此。

此外,如果我使用PDO :: FETCH_NUM,则正确返回正确数量的字段和相应数据,如下所示:

Array ( [0] => Array ( [0] => 1 
                       [1] => admin 
                       [2] => 21232f297a57a5a743894a0e4a801fc3 
                       [3] => Administrator 
                       [4] => 0 )
        [1] => Array ( [0] => 2 
                       [1] => jodel_ross 
                       [2] => 2cdaeb5df4cf941d9c5650591cba1fdc 
                       [3] => Jodel Ross, Jr. 
                       [4] => 1 ) ) 

请帮助,我需要了解为什么,我在网上搜索答案,但没有找到任何答案。 感谢。

Development environment:
Windows 7 x64
PHP 5.3.6 
Mysql 5.5 
Apache 2.0.64 
Zend Framework 1.11

1 个答案:

答案 0 :(得分:1)

Zend Framework 1.x,PHP 5.3.x和setFetchMode()仍存在一个开放错误,这就是它无法按预期工作的原因。

请参阅http://framework.zend.com/issues/browse/ZF-10866http://framework.zend.com/issues/browse/ZF-3470

请投票支持关闭此错误或提交补丁。