我是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
一起得到它?
答案 0 :(得分:2)
因为PDO返回一个关联数组和一个索引数组,这是一个名为FETCH_BOTH
的标准选项。
有关如何使用FETCH_ASSOC
或FETCH_NUM
的信息,请参阅此页http://php.net/manual/en/pdostatement.fetch.php。
答案 1 :(得分:0)
默认情况下,PDO在获取数据时将获取数字AND关联数组。为确保您只获得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)
希望这会有所帮助。
答案 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);