使用重复密钥更新将PHP多维数组插入Mysql数据库

使用重复密钥更新将PHP多维数组插入Mysql数据库,php,mysql,Php,Mysql,您好,我需要知道mysql的内部语法,以便使用on replicate key一次插入一组数据 我正在尝试,但没有达到预期的效果(这是一个实践示例): SQL查询:在重复键上向用户(正数、负数、代码)插入值('23'、'-23'、'rewe12314')、('2'、'-2'、't4234df'),更新正数=23,负数=-23,正数=2,负数=-2 insert部分是正确的,我假设我对on duplicate key update的语法不正确。你能告诉我正确的语法吗 这是我的密码: $users

您好,我需要知道mysql的内部语法,以便使用on replicate key一次插入一组数据

我正在尝试,但没有达到预期的效果(这是一个实践示例):

SQL查询:在重复键上向用户(正数、负数、代码)插入值('23'、'-23'、'rewe12314')、('2'、'-2'、't4234df'),更新正数=23,负数=-23,正数=2,负数=-2

insert部分是正确的,我假设我对on duplicate key update的语法不正确。你能告诉我正确的语法吗

这是我的密码:

 $users = array(
 array(
    'positive_number' => '23',
    'negative_number' => '-23',
    'code' => 'rewe12314',
 ),
 array(
    'positive_number' => '2',
    'negative_number' => '-2',
    'code' => 't4234df',
 )

 );

 echo "<br>";

 $total_rows = count($users);

 $values = array();
 for ($i = 0; $i < $total_rows; $i++) {


 $POSITIVE_NUMBER = $users[$i]['positive_number'];
 $NEGATIVE_NUMBER = $users[$i]['negative_number'];
 $CODE = $users[$i]['code'];

 $values[] = "('$POSITIVE_NUMBER', '$NEGATIVE_NUMBER', '$CODE')";
 $values_update[] = "positive_number=".$POSITIVE_NUMBER.", 
                    negative_number=".$NEGATIVE_NUMBER;

 }


 $sql = "INSERT INTO users (positive_number, negative_number, code) 
 VALUES";
 $sql.= implode(',',$values);
 $sql.= " ON DUPLICATE KEY UPDATE ";
 $sql.= implode(',',$values_update);

 echo "SQL query: " . $sql;
 if (!$conn->query($sql) === TRUE) {
 echo "Error: " . $sql . "<br>" . $conn->error;
 }
$users=array(
排列(
“正数”=>“23”,
“负数”=>“-23”,
“代码”=>“rewe12314”,
),
排列(
“正数”=>“2”,
“负数”=>“-2”,
“代码”=>“t4234df”,
)
);
回声“
”; $total_rows=计数($users); $values=array(); 对于($i=0;$i<$total_行;$i++){ $POSITIVE_NUMBER=$users[$i]['POSITIVE_NUMBER']; $NEGATIVE_NUMBER=$users[$i]['NEGATIVE_NUMBER']; $CODE=$users[$i]['CODE']; $values[]=“(“$POSITIVE_NUMBER”、“$NEGATIVE_NUMBER”、“$CODE”)”; $values\u update[]=“正数=”.$positive\u number.”, 负数=“.$负数”; } $sql=“插入用户(正数、负数、代码) 价值观”; $sql.=内爆(“,”,$values); $sql.=“在重复密钥更新时”; $sql.=内爆(“,”,$values\u update); echo“SQL查询:”$sql; if(!$conn->query($sql)==TRUE){ echo“Error:”.$sql.“
”$conn->Error; }
我认为了解语法可以解决这个问题。
提前感谢您的帮助,问候

ON DUPLICATE KEY UPDATE
子句中不能有多个赋值。您可以改为使用函数访问
UPDATE
子句中特定插入的值。因此,只需更改这些行:

$sql.= " ON DUPLICATE KEY UPDATE ";
$sql.= implode(',',$values_update);
致:


请参见

我看不出您在哪里执行了查询以及使用哪个api连接。我所看到的只是你在附和。因此,很难给您提供正确的错误处理参考。我将该部分添加到代码片段中,但没有抛出错误。非常感谢,这正是我所需要的。问候语!
$sql .= " ON DUPLICATE KEY UPDATE positive_number=VALUES(positive_number),
                                  negative_number=VALUES(negative_number)";