0

こんにちは、私はこのクエリに問題があります:

$size = isset($_POST['size'])
  ? "'".mysql_real_escape_string($_POST['size'])."'"
  : "NULL";

$color = isset($_POST['color'])
  ? "'".mysql_real_escape_string($_POST['color'])."'"
  : "NULL";

if (is_numeric($_POST['productID']) && is_numeric($_POST['amount']))
{           
  mysql_query("INSERT INTO usercart VALUES ('', '"
  .mysql_real_escape_string($_SESSION['user_ID'])."', '"
  .mysql_real_escape_string($_POST['productID'])."', "
  .$size." , ".$color." , '".mysql_real_escape_string($_POST['amount'])."')"
  ." ON DUPLICATE KEY UPDATE amount = amount + '"
  .mysql_real_escape_string($_POST['amount'])."'") or die(mysql_error());
}

私の MySQL テーブルには、、、およびという名前"product"の一意のインデックスがあります。しかし、このクエリを実行すると、金額を更新する代わりに挿入するだけです。MySQL のドキュメントを読むと、インデックス名を指定する必要はありません。productIDuserIDsizecolor

これを何時間もいじっています。それで、誰かがどうしたか知っていますか?

4

2 に答える 2

0

サロガートキー「cart_id」があるようです。これも最初のフィールドとして自動インクリメントされます。フラグメントにより、DBMSが最初のフィールドであるcart_idにuser_idを入力しようとする可能性があります。次のように、cart_idを省略して、指定された挿入を使用してみてください。

INSERT INTO usercart(user_id, product_id, ... )
VALUES (user_id, product_id, ...)
   ;
于 2012-04-15T13:36:30.763 に答える
0

NULL は常に一意と見なされます。したがって、色またはサイズのいずれかを null に設定すると、挿入するタプルは一意の制約に関する限り一意と見なされます。

于 2012-04-15T13:43:11.263 に答える