使用PDO fetchAll :: fetch_assoc将数据添加到php变量

时间:2012-10-02 04:10:46

标签: php sql pdo

好吧这可能会让人感到困惑因为我还没有完全弄清楚如何完美地解释这个问题,但我只是展示代码来解释比我能说的更好。

基本思路:我试图从查询中收集所有相关数据,将其分配给PHP变量,然后通过json.encode返回,以便在需要Javascript的网站上使用。

所以这是我想要做的一个例子:

$stmt = $pdo->prepare("SELECT * FROM users WHERE uid= ?");
try {
    $stmt->execute(array($uid));
} catch (PDOException $e) {
    echo $e -> getMessage();  exit;
}

if(!$stmt->rowcount()){
    return false; exit;
}

$data = $stmt->fetchAll(PDO::FETCH_ASSOC); 

所以我在这一点上显示$ data,我得到了这个结果:

Array ( 
  [0] => Array (
            [uid] => 1 
            [pass] => *****
            [show_name] => Dave
            [email] => test@test.com
  ) )

这就是我期望发生的事情:)

接下来,我想将更多查询结果添加到“$ data”中。像这样:

    $stmt = $pdo->prepare("SELECT * FROM databank WHERE uid=?");
    try{
        $stmt->execute(array($uid));
    } catch (PDOException $e){
        echo $e -> getMessage();  exit;
    }   
$data .= $stmt->fetchAll(PDO::FETCH_ASSOC);

这是出错的地方......当我回显/ print_r $数据时,结果是:

 ArrayArray

有人可以解释为什么会这样吗?我怎么解决它请:)。

感谢您的时间!

1 个答案:

答案 0 :(得分:4)

你将每个结果连接到$ data,好像结果是字符串,但它们是数组;当强制将数组表示为字符串时,PHP会生成“数组”,这不是您想要的。

在第一行之前,请执行

 $data = array();

代替你的最后一行,

 $data[] = $stmt->fetchAll(PDO::FETCH_ASSOC)

你应该

Array ( 
  [0] => Array (
            [uid] => 1 
            [pass] => *****
            [show_name] => Dave
            [email] => test@test.com
  ),
  [1] => Array (
            [uid] => 2
            [pass] => *****
            [show_name] => Joe
            [email] => test@test.com
  ),
  [...]
)

in $ data。

希望这有帮助!