我有一个基本的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)或在多个列上添加唯一索引,而不是主键。
索引最佳实践