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

Php 为什么在fetchAll()之前需要execute(),php,mysql,database,pdo,Php,Mysql,Database,Pdo,我有以下代码: $clicks = $statement->prepare($query); $offers->bindValue(1, $id, PDO::PARAM_INT); $clicks->execute(); $results = $clicks->fetchAll(); 查询工作正常 装订很好 到底是什么让我想知道,为什么我必须首先执行()查询才能调用fetchAll()。 我之所以采用这种解决方案/假设是因为,execute()只返回true/fal

我有以下代码:

$clicks = $statement->prepare($query);
$offers->bindValue(1, $id, PDO::PARAM_INT);
$clicks->execute();
$results = $clicks->fetchAll();
  • 查询工作正常
  • 装订很好
到底是什么让我想知道,为什么我必须首先执行()查询才能调用fetchAll()。 我之所以采用这种解决方案/假设是因为,execute()只返回true/false,而不调用execute(),fetchAll()将不会返回任何内容。 这是正常的做法吗

很久以前,我就一直在PDO工作,所以我不太记得如何正确处理它

多谢各位


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

PDO
prepare()
使用,所以是的:它们必须准备好,然后执行才能产生任何结果。如果不需要重用该语句,则可以使用。

PDO
prepare()
使用,因此是:必须准备好它们,然后执行它们才能产生任何结果。如果不需要重用该语句,则可以使用。

因为如果SQL在绑定变量后立即自动执行,则无法绑定多个变量。因此,您必须通过显式执行语句来告诉它何时完成绑定。

因为如果SQL在绑定变量后立即自动执行,您将无法绑定多个变量。因此,您必须通过显式执行语句来告诉它何时完成绑定。

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

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

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

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

编辑
另一个原因是
execute()<代码>$stmt->execute(数组($id))
将允许您跳过
bindValue
调用。

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

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

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

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

编辑: 另一个原因是
execute()<代码>$stmt->execute(数组($id))
允许您跳过
bindValue
调用