可能重复:
What is the best way to insert into and update a single row table in MySQL?
handling duplicate records in mysql Insert statement
我有一个php网页表单,当点击“提交”按钮时会将记录插入我的数据库。但是,我想如果数据库中已存在具有相同主键(itemID)的记录,则插入操作将被中止,并且将警告用户。
我的'插入'代码:
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO inventory (itemID, name, itemcategory, qis, reorderlevel, unitcost, sellingprice,
supplier, specifications) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['itemID'], "text"),
GetSQLValueString($_POST['name'], "text"),
GetSQLValueString($_POST['itemcategory'], "text"),
GetSQLValueString($_POST['qis'], "double"),
GetSQLValueString($_POST['reorderlevel'], "int"),
GetSQLValueString($_POST['unitcost'], "double"),
GetSQLValueString($_POST['sellingprice'], "double"),
GetSQLValueString($_POST['supplier'], "text"),
GetSQLValueString($_POST['specifications'], "text"));
mysql_select_db($database_con1, $con1);
$Result1 = mysql_query($insertSQL, $con1) or die(mysql_error());
$insertGoTo = "insertsuccess.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];}
header(sprintf("Location: %s", $insertGoTo));}
答案 0 :(得分:2)
如果您使用MySQL,则存在INSERT ... ON DUPLICATE KEY UPDATE结构。
在你的情况下:
INSERT INTO inventory (itemID, name, itemcategory, qis, reorderlevel, unitcost, sellingprice,supplier, specifications) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE name = %s, itemcategory = %s, ....)
这要求itemId在表中定义为唯一键。根据你的问题,无论如何你想要的。
答案 1 :(得分:0)
如果在表定义中将ItemID
列定义为主键,则查询将在duplicate
个键的情况下给出错误。您可以在错误捕获部分中提醒用户。
注意:不推荐使用Mysql扩展,而是使用MYSQLi_ *或PDO扩展。
答案 2 :(得分:0)
您可以使用'INSERT IGNORE'语句,并检查LAST_INSERT_ID()。如果LAST_INSERT_ID()返回0,则表示它是重复条目,您可以提醒用户。