SQL返回错误,即使查询成功


SQL Returning error even though query successful

我有一个基本的web表单,它接受3个输入并将它们插入到数据库表中。数据库设置:

    require_once 'MDB2.php';
    include "sql-connect.php";
    $host = 'host.yyy.uk';
    $dbName = 'user01';
    $dsn = "mysql://$username:$password@$host/$dbName"; 
    $db = &MDB2::connect($dsn); 
    if (PEAR::isError($db)) { 
        die($db->getMessage());
    }
    $db->setFetchMode(MDB2_FETCHMODE_ASSOC);

但是,即使数据被正确地输入到数据库中,并且数据被输入到数据库,php也会返回一个错误(无效查询:键"PRIMARY"的重复条目"AAA123(ACode)")。这是我处理表单的代码:

if (isset($_POST['submit'])) {
    $sql = "INSERT INTO MODULES (APart, ACode, ATitle) VALUES ('$_POST[APart]', '$_POST[ACode]', '$_POST[ATitle]')";
    mysql_query($sql);
    $endResult = mysql_query($sql);
    if (!$endResult) {
        $message  = 'Invalid query: ' . mysql_error() . "'n";
        $message .= 'Whole query: ' . $sql;
        die($message);
    }
}

您正在运行两次查询。

第一次,它成功了,但你对结果无所作为。

第二次,它失败了——然而,第一次成功了,所以你得到了部分成功(数据被创建)。

只需删除重复项。

if (isset($_POST['submit'])) {
    $sql = "INSERT INTO MODULES (APart, ACode, ATitle) VALUES ('$_POST[APart]', '$_POST[ACode]', '$_POST[ATitle]')";
    // mysql_query($sql); /* REMOVE THIS LINE - this query succeeds */
    $endResult = mysql_query($sql); /* LEAVE THIS LINE - this fails if the first succeeds, because of your key constraints */
    if (!$endResult) {
        $message  = 'Invalid query: ' . mysql_error() . "'n";
        $message .= 'Whole query: ' . $sql;
        die($message);
    }
}

此外,还要查看PDO和MySQL库,以防止自己被注入。

错误:重复条目意味着您试图插入数据库中已经存在的行。

解决方案
从列中删除主键(Acode)或在多个列上添加唯一索引,而不是主键。

索引最佳实践