2013-10-26 65 views
0

我正在使用Zend Frameworker 1.12。Zend Framework錯誤:無效的參數編號:沒有參數被綁定'

根據幫助文件,我使用Zend_Db_Statement來執行我的sql。

下面是我的PHP代碼:

$sql = "delete from options where id=?"; 
$stmt = new Zend_Db_Statement_Mysqli($this->getAdapter(), $sql); 
return $stmt->execute(array('1')); 

但誤差異常 'PDOException' 與消息 'SQLSTATE [HY093]:無效參數號:沒有參數被束縛' 中d:\ Zend的\工作空間\ DefaultWorkspace.metadata.plugins \ org.zend.php.framework.resource \ resources \ ZendFramework-1 \ library \ Zend \ Db \ Statement \ Mysqli.php:209 堆棧跟蹤:

....... .. .........

我在Google上搜索了一天s,但沒有用。

任何人都知道如何解決它?

+0

事實上,當您使用_Mysqli類時得到'PDOException',這讓我認爲您應該使用'Zend_Db_Statement_Pdo'來代替。你能提供'\ Zend_Debug :: dump(get_class($ this-> getAdapter()))的輸出嗎?死亡;'?在任何情況下,爲了防止這樣的'硬編碼'錯誤,使用'$ this-> getAdapter() - > query($ sql,array('1'));',而應該自動使用正確的類,在內部爲您準備並綁定參數。 –

+0

運行Zend_Debug :: dump(get_class($ this-> getAdapter())),它輸出'Zend_Db_Adapter_Pdo_Mysql' –

回答

4

該代碼使用類Zend_Db_Statement_Mysqli,但您的連接不是'mysqli'連接。它是一個Pdo_Mysql連接。這會導致代碼失敗。您可以通過將Zend_Db_Statement_Mysqli替換爲Zend_Db_Statement_Pdo來修復您的代碼。然而,一個更好的解決方案將是如下:

$sql = "delete from options where id=?"; 
$this->getAdapter()->query($sql, array('1')); 

這應該會自動使用正確的類(無論你的數據庫連接的類型),並會照顧不同的步驟內。

-1
$sql = "delete from options where id=?"; 
$stmt = new Zend_Db_Statement_Mysqli($this->getAdapter(), $sql); 
return $stmt->execute(array(1 => '1')); 
+0

不起作用。我嘗試過這個。仍然錯誤。 –

+0

你使用模型類嗎?創建您自己的表類並從Zend_Db_Table_Abstract擴展它。然後你可以使用delete()方法刪除一些記錄。 – romik

+0

是的,我使用模型類並擴展Zend_Db_Table。我知道我可以使用刪除方法。我只想執行sql。 –

相關問題