首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO->bindParam、PDO->bindValue和PDO->closeCursor

PDO->bindParam、PDO->bindValue和PDO->closeCursor
EN

Stack Overflow用户
提问于 2010-09-16 17:28:46
回答 2查看 2.3K关注 0票数 1

到目前为止,我一直在使用PDO->bindParam,但在阅读手册时,我发现了PDO->bindValue,因为我可以告诉PDO->bindValue通过值传递的位置,以及PDO->bindParam通过引用传递的位置,这是唯一的区别吗?

代码语言:javascript
复制
$modThread = db()->prepare("UPDATE `threads` SET `modtime` = UNIX_TIMESTAMP( ) WHERE `threadid` =:id LIMIT 1");

while(something)
{
        $modThread->bindParam(':id', $thread);
        $modThread->execute();
//*******************HERE********************//
}

当我再次阅读手册时,我发现:PDO->closeCursor我应该把它放在标记的地方吗?它是可选的还是自动调用的?似乎只有特定的司机才需要它。在不需要/不支持它的驱动程序上调用它会导致错误吗?那MySQL呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-16 18:17:20

这里的“重现”bindParam()实际上并不是必需的:

代码语言:javascript
复制
$thread = 0;
$modThread->bindParam(':id', $thread);

while($thread < 20)
{
    $thread++;
    $modThread->execute(); //executing with the new value, which you couldn't do with bindValue
}

当没有结果集时,您不需要closeCursor() (即,只有在SELECT或过程返回结果的情况下才需要),但通常我已经在前面的语句/行中的某处执行了fetchAll。

票数 1
EN

Stack Overflow用户

发布于 2011-11-11 07:45:49

这不是真的。如果您发现自己需要使用closeCursor,那么最好的时机之一是执行insert/update/delete命令,而很少是已经获取结果的SELECT语句。

例如,如果选择一个表中的所有记录,然后发出$stmt->fetch(),这实际上会立即实现closeCursor的目标,因为这些行现在不再处于未提取状态。

从手册中:

当先前执行的PDOStatement对象仍有未读取的行时,对于不支持执行PDOStatement对象的数据库驱动程序,此方法非常有用。如果您的数据库驱动程序受到此限制,则问题本身可能表现为无序错误。

在下列任一情况下,您将真正需要closeCursor:

  • 如果您的DB驱动程序不允许执行新的stmt,而以前的execute
  • 中有未提取的行可用,那么您有多个准备好的语句,并且想要一个接一个地执行它们($stmt1-> execute ();$stmt->
  • ();$stmt2->execute();$stmt2->closeCursor();$stmt3...etc)
  • You有多个必须在同一个块中执行插入/更新/删除的stmt。这是正确的,因为虽然您不能获得mysql行结果,但您确实可以获得受影响的行数结果集(这仍然是一个结果)。
  • 使用transactions
  • When时,您希望发出select样式的预准备语句并执行它们,但直到后来的

才检索数据

当您不需要closeCursor语句时:

如果在要执行下一条语句之前已经获取了行(如$stmt->()),则获取

  • 。此时,行处于"fetched“状态,并释放驱动程序以执行新语句。

对于关闭游标同样有用的是unset() (即: unset ($stmt ))并将语句设置为null ($stmt= null),从而打开内置垃圾收集器清除一切的大门。

有关详细信息,请参阅手册:http://php.net/manual/en/pdostatement.closecursor.php

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3725346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档