2011-11-28 93 views
7

我已經重新使用我的PHP腳本相同的變量$stmt寫準備的語句:如何知道是否準備好的語句被緩存?

$stmt = $dbh->prepare("SELECT column_A FROM Table1 WHERE id=?"); 
$stmt->bindValue(1, $id, PDO::PARAM_INT); 
$stmt->execute(); 
.... 

$stmt = $dbh->prepare("UPDATE Table2 SET column_B=? WHERE column_A=?"); 
$stmt->bindValue(1, $name); 
$stmt->bindValue(2, $column_A); 
$stmt->execute(); 

我的問題是,我怎麼知道是否正被寫入高速緩存和兩個語句,第二聲明沒有覆蓋第一個語句,雖然兩個語句都共享相同的變量名稱?

+0

+1教我新東西 –

回答

2

陳述是由數據庫引擎,而不是PHP編寫,請參見:

所以在PHP中重複使用相同的變量名並不會使MySQL的準備「高速緩存」。

+1

只適用於'setAttribute(PDO :: ATTR_EMULATE_PREPARES,false)'或適用於true和false兩種情況嗎? –

+0

它在鏈接中說:「如果具有給定名稱的準備好的語句已經存在,則在新語句準備好之前,它將被隱式釋放。」我如何知道'stmt_name'是否由MySQL分配,而不是從PHP變量名取得? –

+0

@ BenHuh:老實說,我不知道。我的猜測是'stmt_name'是PHP從SQL查詢本身計算出來的某種散列。我快速瀏覽了MySQL文檔和PDO/mysql源代碼,但找不到任何指向任何方向的內容,但我認爲MySQL日誌可能會提供某種有用的信息。 –

0

你不知道。但是覆蓋變量不會有太大的變化 - 您將爲變量分配一個新值,而不是編輯任何內容。

相關問題