1

我有以下代码:

$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)

4

3 回答 3

4

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

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

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

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

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

于 2012-04-23T10:31:16.933 回答
1

PDOprepare()使用准备好的语句,所以是的:它们必须准备好,然后执行才能得到任何结果。query()如果您不需要重复使用该语句,则可以使用。

于 2012-04-23T10:29:32.167 回答
1

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

于 2012-04-23T10:30:48.707 回答