簡體   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