我何时应该将closeCursor()用于PDO语句?

时间:2012-10-11 16:06:03

标签: php pdo

The PHP documentation on closeCursor()说它

  

释放与服务器的连接,以便可以发出其他SQL语句,但使语句处于使其能够再次执行的状态。

当我使用该命令时,如果它在我的查询语句之间是否存在似乎并不重要,我开始怀疑我是否需要它。

将它用于不返回数据的数据库调用与使用它的数据库是不同的吗?

2 个答案:

答案 0 :(得分:6)

这取决于使用的驱动程序。我认为对于mysql,除了清除语句的结果之外别无其他。在调用closeCursor()之后,你不能再调用fetch()了。 但是,再次执行该语句应该不是问题。 试着看看mysql_free_result(),它做了类似的事情。

答案 1 :(得分:0)

回答MySql的问题

正如N.B.所述。在执行()之前,准备好相同的PDOStatement。

EG :(这是不好的做法,但是简单的例子,通常你会fetchAll或JOIN。     更复杂的脚本,例如嵌套查询(参见上面关于JOIN),使这个例子更加可行)

<?php
$ids = array( 1, 2 );
$sth = $pdo->prepare( "SELECT name FROM company WHERE id = :id" );
foreach( $ids as $id ) {
  $sth->execute( array( ':id' => $id ) );
  $result = $sth->fetch( PDO::FETCH_ASSOC );
  $sth->closeCursor();
  echo $result['name'] . PHP_EOL;
}
unset( $result );
$sth = null;
$pdo = null;
?>

同样特定于MySQL,您还可以选择将PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性设置为false,这要求PHP始终检查数据库并且不需要closeCursor。 http://php.net/manual/en/mysqlinfo.concepts.buffering.php