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

时间:2015-12-01 20:13:25

标签: php mysql sql

我有一个基本的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也会返回错误(无效查询:重复条目'AAA123(ACode)',用于键'PRIMARY)。这是我处理表单的代码:

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);
    }
}

2 个答案:

答案 0 :(得分:0)

您两次运行查询。

第一次,它成功了,但是对结果什么也没做。

第二次失败-但是,第一次成功,因此您获得了部分成功(已创建数据)。

只需删除重复项即可。

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库以防止注入。

答案 1 :(得分:0)

错误:重复输入表示您正在尝试插入数据库中已经存在的行。

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

Indexes Best practices