从fetchAll pdo获取字符串数组

时间:2017-03-26 11:49:13

标签: php arrays pdo

我面临着一些非常奇怪的事情,并且无法理解为什么我会得到下一个结果, 我有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;阵列

为什么?

1 个答案:

答案 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);
  }
}