Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中使用PDO时出现意外结果_Php_Mysql_Pdo - Fatal编程技术网

在php中使用PDO时出现意外结果

在php中使用PDO时出现意外结果,php,mysql,pdo,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 *

我是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();
}
?>
这里我不明白为什么我在数组中得到2个元素:

[a]=>23表示a列的值为23


但是为什么我会得到
[0]=>23


有关如何使用
FETCH_ASSOC
FETCH_NUM

的信息,请参见本页。默认情况下,PDO在获取数据时将获取数值数组和关联数组。为了确保只获取2个参数中的1个,可以使用
PDO::FETCH_ASSOC
PDO::FETCH_NUMBER
将其指定为查询函数中的第二个参数

改变

foreach($dbc->query('SELECT * FROM `test` ') 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)
希望这有帮助。

试试这种方法

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

这是
PDO

获取关联数组的一个小问题。你可以这样做

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

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

关联数组随附您需要设置
PDO::FETCH_ASSOC
以仅获取
关联
数组,你真正需要的是阅读你正在使用的函数的手册页,这仍然会给出一个数字数组和一个关联数组。在我的情况下,它返回关联数组,或者如果他仍然面临问题,他可以使用
$query->bindColumn('column_name',$var_name)
您可能在调用之前设置了默认的获取模式。OP很可能没有。Rahul增加了一种设置fetchmode的额外方法,请参考我的更新答案。
$query = $db->prepare('........);
$query->execute();
while($row = $query->fetch()){
   // rest of code here
}
foreach($dbc->query('SELECT * FROM `test` ', PDO::FETCH_ASSOC) as $row)
$dbc->query('SELECT * FROM `test` ')->fetch(PDO::FETCH_ASSOC);