【问题标题】:Illegal string PDO fetch() vs fetchAll()非法字符串 PDO fetch() vs fetchAll()
【发布时间】:2018-06-22 09:02:04
【问题描述】:

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

警告:非法字符串偏移

不过,当我使用 fetchAll() 时,它可以完美运行。

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

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

【问题讨论】:

  • 我认为(在这里猜测)fetch 需要一条记录,而 fetchall 接受多条记录
  • @hellyale 没错。 fetch() 用于返回单行结果,fetchAll() 返回多行。
  • 您实际上并没有显示会引发该警告的代码部分。这些代码都没有引用偏移量,因此当您使用$result 执行某些操作时,警告会在稍后出现。
  • @Don'tPanic Yes when i but it in Loop
  • 什么类型的循环?是for 循环还是foreach 循环? @HussamAdil 你能给我们看看代码吗?

标签: php mysql database pdo


【解决方案1】:

此错误不是由于使用了fetch()fetchAll() 造成的,因为这两个函数都没有使用offset,一定是您稍后在代码中执行的某些操作导致了此问题。

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


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

fetchAll() 用于根据查询返回所有相关行。

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

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


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

这对于只需要单行结果的查询很有用。这对于用户登录时很有用,因此您不必遍历数据以将其分配给变量。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 2011-02-15
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多