2010-08-25 31 views
0

如果必須執行幾個查詢。一些參數重疊,有些則不重疊。數組有比PDO準備的語句更多的參數導致錯誤

我想創建一個數組,其中包含所有查詢的所有參數的數據。

我想如果數組包含了準備語句不,它會忽略他們,但它給我這個錯誤值:

Invalid parameter number: number of bound variables does not match number of tokens

這裏是我的意思是:

$data = array('a' => $a, 'b' => $b, 'c' => $c, 'd' => $d); 

$data['e'] = "e"; 
$STH = $this->PDO->prepare("INSERT INTO table1 (fieldA, fieldB, fieldE) VALUES (:a, :b, :e)"); 
$STH->execute($data); 

$data['f'] = "f"; 
$STH = $this->PDO->prepare("INSERT INTO table2 (fieldA, fieldD, fieldF) VALUES (:a, :d, :f)"); 
$STH->execute($data); 

是有辦法讓這個?或者每次都必須創建一個不同的數組?

+0

side-note:錯誤消息表明PDO使用模擬的預處理語句。如果您使用的是自PHP 5.1.something以來的默認PDO_MYSQL。原因很明顯,MySQL在服務器版本5.1.17之前沒有對準備好的語句使用查詢緩存。如果您使用的服務器> = 5.1.17,則可能需要將「PDO :: ATTR_EMULATE_PREPARES」設置爲0 - 具體取決於您實際使用語句的方式。 – VolkerK 2010-08-25 21:44:33

回答

0

不,這不被支持。

順便說一句,當涉及到維護我總是覺得使用bindParam方法會產生更多可讀代碼。像這樣...

$STH = $this->PDO->prepare("INSERT INTO table1 (fieldA, fieldB, fieldE) VALUES (:a, :b, :e)"); 
$STH->bindParam(':a', 'a'); 
$STH->bindParam(':b', 'b'); 
$STH->bindParam(':e', 'e'); 
$STH->execute(); 
+0

Nit-picking:'a:'應該是':a',與'b:'和'c:'相同...... – VolkerK 2010-08-25 21:52:31

+0

謝謝 - 更正。 – rgroli 2010-08-26 04:55:28