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();
- 查询工作正常
- 装订很好
(我使用PHP5.3,上面使用的代码是PDO/PDOStatement)PDO
prepare()
使用,所以是的:它们必须准备好,然后执行才能产生任何结果。如果不需要重用该语句,则可以使用。PDOprepare()
使用,因此是:必须准备好它们,然后执行它们才能产生任何结果。如果不需要重用该语句,则可以使用。因为如果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
调用