再会,
背景信息:
客户的托管服务器正在从 PHP 5.2 升级到 PHP 5.3。在 PHP 5.3 上测试时,客户端的应用程序崩溃了。具体来说,插入和更新方法是破坏应用程序的方法。该应用程序在 Zend Framework v1.7.2 中编码。
我们尝试过简单地升级 Zend Framework 核心,但是似乎以前的开发人员对核心进行了更改,这导致应用程序在框架升级后完全崩溃。
Problem
最好的解决方案是添加一个名为 AppModel 的类,它扩展了 Zend_Db_Table_Abstract,然后简单地覆盖插入和更新方法。此应用程序中的所有模型都扩展了 AppModel 类。在必须将复选框数据或单选按钮数据写入数据库之前,这种方法可以正常工作。
该应用程序现在抛出以下错误:
致命错误:未捕获异常“Zend_Db_Statement_Exception”
消息“无效的绑定变量名称 ':1'” in ....
注意。完整的错误消息位于底部
我几天来一直在互联网上寻找解决方案,但没有成功。我发现的解决方案之一是改变Mysqli to 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