【发布时间】: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 作为默认行为?所以我必须选择我主要使用哪一个,为那个设置默认值,然后总是为另一个指定获取类型