'Zend_Db_Statement_Exception',消息'无效的绑定变量名':1'

时间:2012-01-17 11:07:28

标签: php zend-framework pdo mysqli zend-db

美好的一天,

背景信息:

客户端的托管服务器正在从PHP 5.2升级到PHP 5.3。在PHP 5.3上测试时,客户端的应用程序会中断。具体来说,插入和更新方法是打破应用程序的方法。应用程序在Zend Framework v1.7.2中编码。

我们尝试过简单地升级Zend Framework核心,但是之前的开发人员似乎对核心进行了更改,这导致应用程序在框架升级时完全中断。

问题

最好的解决方案是添加一个名为AppModel的类,它扩展Zend_Db_Table_Abstract,然后简单地覆盖插入和更新方法。此应用程序中的所有模型都扩展了AppModel类。这工作正常,直到必须将复选框数据或单选按钮数据写入数据库。

该应用程序现在抛出以下错误:

  

致命错误:未捕获异常'Zend_Db_Statement_Exception'   消息'无效的绑定变量名':在......中的1''

NB。底部的完整错误消息

我一直在网上寻找解决方案几天徒劳无功。我找到的解决方案之一是将 Mysqli 更改为 Pdo_Mysql 。但似乎框架中没有这样的类。有一个类 Pdo ,它会抛出与Mysqli相同的错误。

请帮忙!

请原谅我的英语。如果您需要澄清,请随时与我联系。提前谢谢

以下是AppModel类的代码示例:

class AppModel extends Zend_Db_Table_Abstract{
                //PHP 5.3 fix   
                public function insert(array $data) {

                    //array to carry data for holding data
                    $ins_data = array();

                    foreach($data as $table => $value){
                        $ins_data['tables'][] = $table;
                        $ins_data['values'][] = mysql_escape_string($value);
                    }

                    $db = Zend_Registry::get('db');                    

                    $ins_query = ' INSERT INTO '.  $this->_name.' ('.implode($ins_data['tables'], ', ').')
                                   VALUES ("'.implode($ins_data['values'], '", "').'")'; 
                    $ins_action = new Zend_Db_Statement_Mysqli($db, $ins_query);
                    $ins_action->execute();
                    return $db->lastInsertId();
                }        
}

完整的错误消息:

Fatal error: 
    Uncaught exception 'Zend_Db_Statement_Exception' 
    with message 'Invalid bind-variable name ':1'' 
    in C:\wamp\www\schoolnet\public_html\Zend\Db\Statement.php:143 
Stack trace: 
#0 C:\wamp\www\schoolnet\public_html\Zend\Db\Statement.php(108): Zend_Db_Statement->_parseParameters(' UPDATE user_te...') 
#1 C:\wamp\www\schoolnet\application\AppModel.php(43): Zend_Db_Statement->__construct(Object(Zend_Db_Adapter_Mysqli), ' UPDATE user_te...') 
#2 C:\wamp\www\schoolnet\application\modules\user\helpers\UserHelper.php(530): AppModel->update(Array, 'user_id = 6') 
#3 C:\wamp\www\schoolnet\application\modules\user\controllers\UserController.php(533): user_helpers_UserHelper->teacherUpdate(Array, 6) 
#4 C:\wamp\www\schoolnet\application\modules\user\controllers\UserController.php(300): UserController->teacherUpdateDetails(Array, 6) 
#5 C:\wamp\www\schoolnet\public_html\Zend\Controller\Action.php(503): UserController->detailseditAction() 
#6 C:\wamp\www\schoolnet\public_html\Zend\Controller\Dispatcher\Standard.php(285): Zend_Control in C:\wamp\www\schoolnet\public_html\Zend\Db\Statement.php on line 143

0 个答案:

没有答案