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 尝试将 user_id 输入第一个字段,即 cart_id。尝试使用指定的插入,省略 cart_id,例如:

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

NULL is always considered unique. So if you set either color or size to null the tuple you're inserting will be considered unique as far as your unique constraints are concerned.

于 2012-04-15T13:43:11.263 回答