The PHP documentation on closeCursor()
说它
释放与服务器的连接,以便可以发出其他SQL语句,但使语句处于使其能够再次执行的状态。
当我使用该命令时,如果它在我的查询语句之间是否存在似乎并不重要,我开始怀疑我是否需要它。
将它用于不返回数据的数据库调用与使用它的数据库是不同的吗?
答案 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