为什么需要在 fetchAll() 之前执行execute()

Jul*_*s F 1 php mysql database pdo

我有以下代码:

$clicks = $statement->prepare($query);
$offers->bindValue(1, $id, PDO::PARAM_INT);
$clicks->execute();
$results = $clicks->fetchAll();
Run Code Online (Sandbox Code Playgroud)
  • 查询工作正常
  • 绑定工作正常

实际上让我想知道的是,为什么我必须首先执行()查询才能调用 fetchAll()。我已经提出了这个解决方案/假设,因为execute()仅返回true/false并且不调用execute(),fetchAll()将不会返回任何内容。这是正常的做法吗?

我以前一直在使用 PDO,很久以前,所以我不太记得如何正确处理它。

非常感谢

(我用的是PHP5.3,上面使用的代码是PDO/PDOStatement)

Tom*_*rdt 5

好吧,SELECT * FROM myTable这只是一段文本,您必须先将其发送到服务器,服务器对其进行解析等,然后才能进行fetchAll()fetchAll不会自动执行的原因execute()是它fetchAll可以被调用两次,并且如果您只需执行一次,您不想执行两次查询:)

它还与参数绑定等相关。参数可以更改,但您可能仍然希望对原始参数值使用获取函数。

这是一个设计问题,这使得使用 PDO 进行编程变得更加容易。它只需要多一行代码:)

您可能可以创建一个包装器并fetchAll()同时执行执行和获取,但您肯定会遇到麻烦。

编辑:另一个原因是execute()实际上需要一个可选的参数数组,它允许您绑定参数。$stmt -> execute(array($id));将允许您跳过bindValue呼叫。