![](/img/trans.png)
[英]Why we use PDO::closeCursor() method/function in PDO PHP?
[英]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.