CodeIgniter中的数据库错误处理问题

时间:2010-08-05 19:08:34

标签: php mysql codeigniter error-handling try-catch

我使用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'

让我知道,如果我犯了错误,我在哪里!

感谢您的时间和帮助他人。 ;)

5 个答案:

答案 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.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;

这将创建一个成功值为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活动记录框架应该为您解除查询。