【问题标题】:PDO->bindParam, PDO->bindValue and PDO->closeCursorPDO->bindParam、PDO->bindValue 和 PDO->closeCursor
【发布时间】:2011-04-13 03:01:12
【问题描述】:

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

$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 怎么样?

【问题讨论】:

标签: php mysql pdo bindvalue bindparam


【解决方案1】:

这里的“重复”bindParam() 并不是真正需要的:

$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 s 或程序返回结果),但通常我已经在前一个语句/行的某处完成了 fetchAll。

【讨论】:

    【解决方案2】:

    这不是真的。如果您发现自己需要使用 closeCursor,最佳时间之一是插入/更新/删除命令,而很少用于您已经获取结果的 SELECT 语句。

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

    来自手册:

    当先前执行的 PDOStatement 对象仍有未获取的行时,此方法对于不支持执行 PDOStatement 对象的数据库驱动程序很有用。如果您的数据库驱动程序存在此限制,则问题可能会表现为无序错误。

    您真正需要 closeCursor 的时间是在以下任何情况下:

    • 如果您的 DB 驱动程序不允许执行新的 stmt,而前一次执行中存在未提取的行
    • 您有多个准备好的语句并希望一个接一个地执行它们 ($stmt1->execute(); $stmt->closeCursor(); $stmt2->execute(); $stmt2->closeCursor( ); $stmt3...等)
    • 您有多个 stmts 必须在同一个块内执行插入/更新/删除。这是真的,因为虽然你没有得到 mysql 行结果,但你确实得到了受影响的行数结果集(这仍然是一个结果)。
    • 使用事务时
    • 当您想要发出选择样式的准备好的语句并执行它们,但直到稍后才检索数据时

    当你不需要 closeCursor 语句时:

    • 如果您在执行下一条语句之前已经获取了行(如 $stmt->fetch())。此时,行处于“已获取”状态并释放驱动程序以执行新语句。

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

    查看手册了解更多信息:http://php.net/manual/en/pdostatement.closecursor.php

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 2013-02-15
      • 2014-08-20
      • 2012-02-04
      • 1970-01-01
      • 2014-05-10
      • 2013-08-16
      • 2023-03-28
      相关资源
      最近更新 更多