非法字符串PDO fetch()vs fetchAll()

时间:2018-01-12 21:12:48

标签: php mysql database pdo

当我在执行PDO语句后尝试调用fetch()时,收到以下警告:

  

警告:非法字符串偏移

虽然我使用fetchAll()时效果很好。

两者之间有什么区别,我将如何使用其中任何一个?

$allData = $con->prepare("SELECT * FROM users");
$allData->execute();
$result = $allData->fetch();

1 个答案:

答案 0 :(得分:3)

此错误不是由于fetch() OR fetchAll()的使用,因为这些函数都没有使用offset,您的代码中必须要做的事情是造成这个问题。

我相信您的问题与循环使用您的价值观的方式有关,因为您说使用fetchAll()时它会起作用。您的循环正在抛出错误,因为它正在尝试访问不存在的偏移量,因为fetch()只返回单个结果,而fetchAll()将从您的查询返回多个结果。

关于你的问题“两者之间有什么区别(fetch()& fetchAll()),我将如何使用其中任何一个?”,这是你的答案。

根据查询,

fetchAll()用于返回所有相关行。

这对于需要多行数据的查询非常有用。

  

PDOStatement :: fetchAll()返回一个包含所有内容的数组   结果集中的剩余行。数组将每行表示为   列值数组或具有属性的对象   对应于每个列名。如果有,则返回一个空数组   获取的结果为零,或者失败时为FALSE。

fetch()用于从查询中返回单行结果。

这对于只需要单行结果的查询非常有用。这对于用户登录时非常有用,因此您无需循环访问数据以将其分配给变量。

  

从与PDOStatement对象关联的结果集中获取一行。   fetch_style参数确定PDO如何返回行。