Mysql_error()在PHP中没有捕获INSERT错误

时间:2011-10-26 17:19:11

标签: php mysql

这里是新的,并且非常适合编程,所以请轻松实现..

我发现由于重复的记录错误,我的INSERT失败了。我通过在带有文字的MySQL控制台中运行查询来解决这个问题,其中出现错误#1062。

我想了解的是为什么mysql_error()mysql_errno()没有在我的PHP脚本中捕获此错误。

以下是我所做的一般设置。我有一个提交到调用data_insert()

的php文件的表单
function data_insert($var1, $var2, $var3, $var4){

    $db = db_connect();
    $query = "INSERT INTO exampletable (id, id_2, id_3, id_4) 
            VALUES ('$var1', '$var2', '$var3', '$var4')";

    $result = $db->query($query);
        if (!$result) 
            { 
            echo ('Database Error:' . mysql_error());
            } 
        else 
            {
            echo "Data added to db";
            }
}

数据库连接:

function db_connect()
{
    $result = new MySQLi('localhost', 'root', 'root', 'dbname');
    if (!$result)
        throw new Exception('Could not connect to database server');
    else
        return $result;
}

我得到的结果是:

Database Error:

PHP回声“数据库错误:”因为INSERT失败,但没有回显后续的MySQL错误信息。老实说,我不确定我应该看到什么,但通过阅读其他一些SO问题,我已经仔细检查了我的php.ini文件以进行错误处理,并且E_ALL和display_errors设置得恰当(虽然不确定是否在这种情况下很重要。)

我的逻辑中有什么东西我不理解,就像链接资源mysql_error()的范围一样吗?

感谢您的帮助,我希望这是一件令人尴尬的事情。

我知道上面缺少XSS和安全预防措施以及统一的异常处理。宝贝步骤虽然。为了讨论起见,这里简化了它。

3 个答案:

答案 0 :(得分:3)

您正在使用mysqli(请注意 i )进行数据库操作,但是正在调用mysql_error(没有 i )。它们是两个完全不同的接口,根本不共享内部状态。一个数据库处理/结果在另一个中不可用。

请尝试mysqli_error()(请注意)。

答案 1 :(得分:0)

据我所知,您似乎使用MySQLi类进行连接和查询,但您正在尝试访问MySQL错误消息。 MySQLi和MySQL不一样,因此一个中的错误不会显示在另一个中。您应该查找MySQLi的错误处理,而不是MySQL。

答案 2 :(得分:0)

您混淆了两种不同的连接mySQL DB的方法。

mysql_error()仅适用于通过mysql_query()运行的查询。

在使用mysqli时,必须使用mysqli_error()