【问题标题】:PDO fetch doesn't work while fetchAll worksfetchAll 工作时 PDO 提取不起作用
【发布时间】:2016-04-16 09:10:07
【问题描述】:

我正在尝试在我的网站中实现 PDO,我正在检查 fetch 和 fetchAll 的使用,并发现了这种奇怪的行为。此代码完美运行:

    $query="SELECT `id`, `username`, `nome`, `email`, `pwd`, `level` FROM `users` WHERE `username`= ? LIMIT 1";
    $stmt=$myconn->prepare($query);
    $stmt->bindParam(1, $uname);
    $stmt->execute();

    $row=$stmt->fetchAll();
    print_r($row);

虽然这个不起作用:fetch 返回 false 且没有错误代码 (00000):

    $query="SELECT `id`, `username`, `nome`, `email`, `pwd`, `level` FROM `users` WHERE `username`= ? LIMIT 1";
    $stmt=$myconn->prepare($query);
    $stmt->bindParam(1, $uname);
    $stmt->execute();

    while($row = $stmt->fetch()) {
        echo $row->username . "\n";
        echo $row->nome . "\n";
        echo $row->email . "\n";
    }

知道为什么吗?

【问题讨论】:

  • $row->username -> $row["username"];见:php.net/manual/en/pdostatement.fetch.php
  • 作为@Rizier123 或$stmt->fetch(PDO::FETCH_OBJ) 然后将属性作为对象访问。
  • 哦,太好了,我所遵循的指南错过了 FETCH_OBJ 命令,谢谢。顺便说一下,$row->username 有效。
  • @TizianoMischi 您可以设置默认获取类型,这样您就不必每次都明确表示PDO::FETCH_OBJ。检查this链接。
  • @Script47 你的评论很有趣,我确实设置了PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC 来使用fetchAll。这意味着我不能设置两种不同的行为,一种用于 fetchAll,另一种用于 fetch 作为默认行为?所以我必须选择我主要使用哪一个,为那个设置默认值,然后总是为另一个指定获取类型

标签: php pdo


【解决方案1】:

这应该可行:

$stmt=$myconn->prepare($query);
$stmt->bindParam(1, $uname);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);  
while($row = $stmt->fetch()) {
    echo $row['username'] . "\n";
    .        
    .
    .
}

【讨论】:

  • 谢谢亚当,确实是我在 cmets 中对我的问题提出的其他建议。
猜你喜欢
  • 2013-02-05
  • 1970-01-01
  • 2018-11-14
  • 2015-03-31
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多