当我在执行PDO语句后尝试调用fetch()
时,收到以下警告:
警告:非法字符串偏移
虽然我使用fetchAll()
时效果很好。
两者之间有什么区别,我将如何使用其中任何一个?
$allData = $con->prepare("SELECT * FROM users");
$allData->execute();
$result = $allData->fetch();
答案 0 :(得分:3)
此错误不是由于fetch()
OR fetchAll()
的使用,因为这些函数都没有使用offset
,您的代码中必须要做的事情是造成这个问题。
我相信您的问题与循环使用您的价值观的方式有关,因为您说使用fetchAll()
时它会起作用。您的循环正在抛出错误,因为它正在尝试访问不存在的偏移量,因为fetch()
只返回单个结果,而fetchAll()
将从您的查询返回多个结果。
关于你的问题“两者之间有什么区别(fetch()
& fetchAll()
),我将如何使用其中任何一个?”,这是你的答案。
fetchAll()
用于返回所有相关行。
这对于需要多行数据的查询非常有用。
PDOStatement :: fetchAll()返回一个包含所有内容的数组 结果集中的剩余行。数组将每行表示为 列值数组或具有属性的对象 对应于每个列名。如果有,则返回一个空数组 获取的结果为零,或者失败时为FALSE。
fetch()
用于从查询中返回单行结果。
这对于只需要单行结果的查询非常有用。这对于用户登录时非常有用,因此您无需循环访问数据以将其分配给变量。
从与PDOStatement对象关联的结果集中获取一行。 fetch_style参数确定PDO如何返回行。