Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mySQL上的重复密钥多次更新_Php_Mysql_Sql - Fatal编程技术网

Php mySQL上的重复密钥多次更新

Php mySQL上的重复密钥多次更新,php,mysql,sql,Php,Mysql,Sql,我试图创建一个简单的SQL INSERT或UPDATE语句,但老实说,我不知道我在做什么 这是我到目前为止的功能 function addInventoryBook($isbn, $sku, $price, $quantity, $condition, $dateOpened){ $q = "INSERT INTO ".TBL_INVENTORY." VALUES('$isbn', '$sku', $price, $quantity, '$condition', $dateOpen

我试图创建一个简单的SQL INSERT或UPDATE语句,但老实说,我不知道我在做什么

这是我到目前为止的功能

function addInventoryBook($isbn, $sku, $price, $quantity, $condition, $dateOpened){
   $q = "INSERT INTO ".TBL_INVENTORY." VALUES('$isbn', '$sku', $price, 
   $quantity, '$condition', $dateOpened)
   ON DUPLICATE KEY UPDATE VALUES('$isbn', '$sku', $price, $quantity, 
   '$condition', $dateOpened)";     

   return mysql_query($q, $this->connection);           
}
以前的一个函数似乎在更新价格字段

function addInventoryBook($isbn, $sku, $price, $quantity, $condition, $dateOpened){
   $q = "INSERT INTO ".TBL_INVENTORY." VALUES('$isbn', '$sku', $price, 
   $quantity, '$condition', $dateOpened)
   ON DUPLICATE KEY UPDATE price = $price";     

   return mysql_query($q, $this->connection);           
}

Assuimg TBL_INVENTORY是一个具有列值的字符串:

$q = "INSERT INTO ".TBL_INVENTORY." VALUES('$isbn', '$sku', $price,     $quantity, '$condition', $dateOpened) ON DUPLICATE KEY UPDATE isbn='$isbn', sku='$sku', price='$price', quantity='$quantity', condition='$condition', dateOpened='$dateOpened'";

参考链接:

假设TBL\U库存是一个字符串,列值为:

$q = "INSERT INTO ".TBL_INVENTORY." VALUES('$isbn', '$sku', $price,     $quantity, '$condition', $dateOpened) ON DUPLICATE KEY UPDATE isbn='$isbn', sku='$sku', price='$price', quantity='$quantity', condition='$condition', dateOpened='$dateOpened'";

参考链接:

我会这样写,而不是第二次提供每个值:

ON DUPLICATE KEY UPDATE 
  isbn       = VALUES(isbn)
  sku        = VALUES(sku)
  price      = VALUES(price)
  quantity   = VALUES(quantity)
  condition  = VALUES(condition)
  dateOpened = VALUES(dateOpened)
(如果插入成功,将分配本应插入的值。)


(您可能不希望将值赋给构成insert违反的“unique”键的任何列;我在这里包含了所有列,因为这是您在尝试中显示的内容。)

我将这样写,而不是再次提供每个值:

ON DUPLICATE KEY UPDATE 
  isbn       = VALUES(isbn)
  sku        = VALUES(sku)
  price      = VALUES(price)
  quantity   = VALUES(quantity)
  condition  = VALUES(condition)
  dateOpened = VALUES(dateOpened)
(如果插入成功,将分配本应插入的值。)


(您可能不希望将值分配给构成insert违反的“唯一”键的任何列;我在这里包括了所有列,因为这是您在尝试中显示的内容。)

尝试在重复键更新时设置price=values(price),sku=values(sku),quantity=values(quantity),…,您可能需要在“.TBL_INVENTORY.”和值之间添加字段名。
echo
在运行查询之前,请确保它实际上是您所认为的内容。@Crontab这是一个很好的观点,因为在正确的mySQL语法中没有“SET”。(这也是原来的问题,然后被修复了。)在重复键更新上尝试
设置price=VALUES(price),sku=VALUES(sku),quantity=VALUES(quantity),确保它确实是您所认为的。@Crontab这是一个很好的观点,在正确的mySQL语法中没有任何“SET”。(这也是在最初的问题中,然后被修复了。)你不必在查询的更新部分包含每个字段。我的观点是,询问者可能只想在更新条件下更新价格。你是对的,我只是为了一致性才这样做的@mk_89将根据自己的意愿使用它。我想你的意思是有一个sql函数,我想我以前试过这个,我记得它不起作用,因为我不能用这种方式更新超过3个字段,在使用OR语句时,我通常会遇到同样的问题。你不必在查询的更新部分包含每个字段。我的观点是,询问者可能只想在更新条件下更新价格。你是对的,我只是为了一致性才这样做的@mk_89将根据自己的意愿使用它。我想你的意思是有一个sql函数来解决这个问题。我想我以前试过这个,我记得它不起作用,因为我不能用这种方式更新3个以上的字段,我通常在使用OR语句时会遇到同样的问题。@Vatev:这个模式对于插入多行的语句很有用。(这个答案和你作为评论留下的答案是一样的;我对你的评论投了赞成票,如果你留下一条,我会对你的答案投赞成票。)@Vatev:这个模式对于插入多行的语句非常有用。(此答案与您作为评论留下的答案相同;我对您的评论投了赞成票,如果您留下评论,我会对您的答案投赞成票。)