我有一个基本的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);
}
}
答案 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)