Добрый день,
Справочная информация:
Сервер хостинга клиента обновляется с 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