-1

我是 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] => 23它表示 a 列的值为 23

但是我为什么要[0] => 23和它相处???

4

4 回答 4

2

因为 PDO 同时返回关联数组和索引数组,这是标准选项,称为FETCH_BOTH.

有关如何使用FETCH_ASSOCFETCH_NUM.

于 2013-08-19T09:58:54.637 回答
0

默认情况下,PDO 在获取数据时会抓取一个数字和一个关联数组。为确保您只获得 2 个中的 1 个,您可以使用PDO::FETCH_ASSOC或将其指定为查询函数中的第二个参数PDO::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)

希望这有帮助。

于 2013-08-19T10:00:18.860 回答
0

试试这个方法

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

这是一个小问题PDO

于 2013-08-19T10:02:02.613 回答
0

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

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

否则

$dbc->query('SELECT * FROM `test` ')->fetch(PDO::FETCH_ASSOC);
于 2013-08-19T10:04:56.487 回答