繁体   English   中英

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

[英]When should I use closeCursor() for PDO statements?

关于closeCursor()的PHP文档说明了这一点

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

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

将它用于不返回数据的数据库调用与那些数据调用是否不同?

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

回答MySql的问题

正如在执行()之前所提到的那样,准备好了相同的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM