Я использую 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();
должны обойти эти проблемы, потому что активная структура записи в кодегнигере должна избегать запросов для вас.