0

重複の可能性:
MySQL で単一行テーブルに挿入して更新する最良の方法は何ですか?
mysql Insertステートメントで重複レコードを処理する

「送信」ボタンをクリックするとデータベースにレコードを挿入する php Web フォームがあります。ただし、同じ主キー (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));}
4

3 に答える 3

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 をテーブルで一意のキーとして定義する必要があります。あなたの質問によると、とにかく欲しいもの。

于 2013-01-21T16:46:47.927 に答える
0

「INSERT IGNORE」ステートメントを使用して、LAST_INSERT_ID() を確認できます。LAST_INSERT_ID() が 0 を返す場合、それはエントリが重複していることを意味し、ユーザーに警告できます。

于 2013-01-21T16:53:23.423 に答える
0

ItemIDテーブル定義で列を主キーとして定義すると、キーの場合、クエリでエラーが発生しますduplicate。エラーキャッチ部分で、ユーザーに警告できます。

注: Mysql 拡張機能は非推奨です。代わりに MYSQLi_* または PDO 拡張機能を使用してください。

于 2013-01-21T16:49:14.757 に答える