我使用CodeIgniter作为我的Web应用程序框架。我使用了一个简单的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'
让我知道,如果我犯了错误,我在哪里!
感谢您的时间和帮助他人。 ;)
答案 0 :(得分:2)
如果出现一些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;
}
答案 1 :(得分:1)
@Monica,不确定这是否有帮助,但您应该知道CI数据库函数永远不会抛出任何错误。他们只是返回真或假。因此@Sarfraz是对的,您必须自己检查是/否和/或自己抛出异常。
此外,您的异常处理代码不执行任何操作。这意味着它将继续运行其后的任何脚本,包括与刚刚失败的记录集一起使用的脚本。
答案 2 :(得分:1)
而不是获取代码点火器db errormsg(html),我想得到一个json显示,然后在ajax请求中我只是检查成功
我重写了
中的DB_driver.phpfunction 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;
这将创建一个成功值为j
的json然后我只是检查错误......
适用于我所有的ajax请求....只是想法......
答案 3 :(得分:0)
您收到错误的原因是'tes **' ti'**'。使用'$username."'".$username1
Where $username = 'tes'
and $username1 = 'ti
答案 4 :(得分:0)
对我来说,@ Sarfraz的代码不起作用,至少在CI 3.1.5中,问题是$ this-> db->查询有一堆包装函数,可以立即调用内置的错误处理程序代码点火器。 如果您想要新的RuntimeException,请改用$this->db->simple_query方法。
除了OP之外,OP应该考虑活动记录,例如:$result = $this->db->select()
->from('tbl_user')
->where('username',$username)
->get()
->result();
应解决这些问题,因为codeigniter活动记录框架应该为您解除查询。