我面临着一些非常奇怪的事情,并且无法理解为什么我会得到下一个结果, 我有2个文件,index.php和send.php send.php从用户的DB列表中获取,index.php显示列表为表,在index.php中我使用require send.php,在send.php中我有这段代码
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();
$result = $sth->fetchAll();
echo '<pre>';
print_r($result);
它工作得很好,但是在index.php中
<?php if (isset($result)): ?>
<pre>
<?php print_($result); ?>
</pre>
<?php endif; ?>
我得到像这样的数组[0] =&gt;阵列
为什么?
答案 0 :(得分:1)
应该是显而易见的,不像fetch()
,你遍历每一行fetchAll()
返回一个行列表,每个行都在一个单独的数组索引中。
$result[0]['column'];
^
|-- first result.
所以你应该这样做:
foreach($result as $row){
echo $row['colname'];
}
默认情况下,这会使$row
成为一个数组,其中键是列名。
另外,如果您想检查是否有结果,请执行以下操作:
// this:
if($result){}
// equals:
if(!empty($result)){}
使用isset()
会导致意外行为:
if(isset($result = false)){
// query failed, but this code still executes.
}
同样尝试访问另一个脚本中定义的全局变量是不好的做法,避免这样做。将代码包装在一个小函数中:
function dbGetUsers(){
// connect to db or whatnot.
$sth = $pdo->prepare('....');
if($sth->execute()){
return $sth->fetchAll();
} else {
die('query failed '. __FILE__ . __LINE__ - 2);
}
}