在PHP中使用PDO的意外结果

时间:2013-08-19 09:55:15

标签: php mysql pdo

我是PDO数据对象的新手。最近我从表中获取数据。我遇到了意想不到的结果。仍然试图找出但现在没有成功。

我的表格:测试

a
__
23
76
786
988
234
12
13

我的代码

<?php
try
{
$dbc = new PDO('mysql:host=localhost;dbname=test','root','',array( PDO::ATTR_PERSISTENT => TRUE ));
foreach($dbc->query('SELECT * FROM `test` ') as $row)
{
    print_r($row);
}
$dbc= NULL;
 }
catch( PDOException $e)
{
print "Error !:".  $e->getMessage()."<br>";
die();
}
?>

结果:

Array ( [a] => 23 [0] => 23 ) Array ( [a] => 76 [0] => 76 ) Array ( [a] => 786 [0] => 786 ) Array ( [a] => 988 [0] => 988 ) Array ( [a] => 234 [0] => 234 ) Array ( [a] => 12 [0] => 12 ) Array ( [a] => 13 [0] => 13 )

这里我不明白为什么我在数组中得到2个元素:

[a] =&gt; 23 它表示列a的值为23

但是为什么我和[0] => 23一起得到它?

4 个答案:

答案 0 :(得分:2)

因为PDO返回一个关联数组和一个索引数组,这是一个名为FETCH_BOTH的标准选项。

有关如何使用FETCH_ASSOCFETCH_NUM的信息,请参阅此页http://php.net/manual/en/pdostatement.fetch.php

答案 1 :(得分:0)

默认情况下,PDO在获取数据时将获取数字AND关联数组。为确保您只获得2中的1个,您可以使用PDO::FETCH_ASSOCPDO::FETCH_NUMBER将其指定为查询函数中的第二个参数。

更改

foreach($dbc->query('SELECT * FROM `test` ') as $row)

// Fetch associative
foreach($dbc->query('SELECT * FROM `test` ', PDO::FETCH_ASSOC) as $row)

// Fetch numeric
foreach($dbc->query('SELECT * FROM `test` ', PDO::FETCH_NUMBER) as $row)

<强> [编辑]
您还可以通过执行以下操作在创建PDO连接后设置默认提取模式:

// Set default fetch mode to PDO::FETCH_ASSOC
$dbc->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

这样做时,做

foreach($dbc->query('SELECT * FROM `test` ')

将与

完全相同
foreach($dbc->query('SELECT * FROM `test` ', PDO::FETCH_ASSOC) as $row)

希望这会有所帮助。

答案 2 :(得分:0)

试试这种方式

$query = $db->prepare('........);
$query->execute();
while($row = $query->fetch()){
   // rest of code here
}

这是PDO

的一个小问题

答案 3 :(得分:0)

获取关联数组。你可以这样做

foreach($dbc->query('SELECT * FROM `test` ', PDO::FETCH_ASSOC) as $row)

Otherwaise

$dbc->query('SELECT * FROM `test` ')->fetch(PDO::FETCH_ASSOC);