2011-11-28 53 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

你不知道。但是覆盖变量不会有太大的变化 - 您将为变量分配一个新值,而不是编辑任何内容。

相关问题