Intereting Posts
API Карт Google v3: как установить уровень масштабирования и центр карты в отправленное пользователем местоположение? PDO подготовил инструкции для хранения содержимого html Настройка Cronjob в Windows Xampp Как я могу кодировать имя файла в PHP в соответствии с RFC 2231? Регулярное выражение в PHP для возврата массива со всеми изображениями из html, например: all src = "images / header.jpg" экземпляры Функция заголовка php выдает ошибку, когда она не должна Есть ли простой способ читать имена файлов в каталоге и добавлять в массив? Auth повторяет контроллер по URL-адресу Как заполнить второе раскрывающееся меню на основе выбора первого раскрывающегося списка с использованием jQuery / AJAX и PHP / MySQL? Команда phpunit не работает для laravel 4 на окнах 7 Проверка IAB на стороне сервера PHP openssl_verify всегда возвращает 0 Laravel Basic HTTP Auth Check Возврат False Многоуровневое нажатие меню меню со страницы на страницу Как пользовательский часовой пояс закодирован в facebook Каким образом prestashop загружает изображения?

Проблема с обработкой ошибок базы данных в CodeIngniter

Я использую CodeIgniter как свою структуру веб-приложений. Я использовал простой Try / Catch, и я отправил пробное значение, чтобы проверить его, и он не сработал!

Я знаю, что могу использовать $this->db->escape() для решения моей проблемы с данными, но я просто хочу знать: почему TRY / CATCH не может поймать эту ошибку!

Код контроллера:

  $this->load->model('user_model'); $result = $this->user_model->test_user("tes'ti"); 

Код модели:

 function test_user($username){ try { $query_str = "SELECT * FROM tbl_user WHERE username = '".$username."'"; $result = $this->db->query($query_str); return $result; } catch (Exception $e) { return; } } 

Вывод:

 A Database Error Occurred Error Number: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ti'' at line 1 SELECT * FROM tbl_user WHERE username = 'tes'ti' 

Дай мне знать, где я совершил ошибку, если бы я это сделал!

Спасибо за ваше время и помогаем другим. 😉

Вам нужно выбросить исключение, если возникла некоторая ошибка mysql:

 try { $query_str = "SELECT * FROM tbl_user WHERE username = '".$username."'"; $result = $this->db->query($query_str); if (!$result) { throw new Exception('error in query'); return false; } return $result; } catch (Exception $e) { return; } 

@Monica, не уверен, что это помогает, но вы должны знать, что функции базы данных CI никогда не выказывают никаких ошибок. Они просто вернули истину или ложь. Поэтому @Sarfraz прав, вы должны либо проверить подлинность / ложь себя, и / или выбросить Исключения самостоятельно.

Кроме того, код обработки исключений ничего не делает. Это означает, что он будет продолжать запускать любые скрипты, которые будут после него, включая скрипты, которые работают с набором записей, который просто не удался.

Вместо того, чтобы получать код ignitor db errormsg (html), я хотел получить json-дисплей, а затем в запросе ajax я просто проверяю на успех

Я переписал DB_driver.php в

 function display_error($error = '', $swap = '', $native = FALSE) //commented //echo $error->show_error($heading, $message, 'error_db'); //this is the magic $data['success'] = false; $data['heading'] = $heading; $data['message'] = $message; $data['type'] = 'error_db'; echo json_encode($data); exit; 

это создаст json с успешным значением как false

то я просто проверяю на ложь …

Работает для всего моего запроса ajax …. просто и идея …

Причина, по которой вы получаете ошибку, связана с «tes **» ti «the **» . используйте '$username."'".$username1

 Where $username = 'tes' and $username1 = 'ti 

Для меня код @Sarfraz не работал, по крайней мере, в CI 3.1.5 проблема заключалась в том, что в запросе $ this-> db-> есть куча функций обертки, которые сразу же вызывают обработчики ошибок, встроенные в воспламенитель кода. Если вы хотите выкинуть новое RuntimeException , тогда вместо этого используйте метод $ this-> db-> simple_query .

на стороне OP должен учитывать активные записи, что-то вроде:

 $result = $this->db->select() ->from('tbl_user') ->where('username',$username) ->get() ->result(); 

должны обойти эти проблемы, потому что активная структура записи в кодегнигере должна избегать запросов для вас.