Php Maria DB SQL Insert INTO ON DUPLICATE仅对第一个更新的值起作用

Php Maria DB SQL Insert INTO ON DUPLICATE仅对第一个更新的值起作用,php,sql,mariadb,Php,Sql,Mariadb,我将此用作编辑表中两列的模板。编辑的条目保存在新的SQL表中,并由唯一键标识符调用 对于SQL中不存在ID的每次编辑,我需要创建ID,因此只需更新: updatenotes SET$UPDATE\u字段,其中shop\u order='“$input[“shop\u order\u NO”]。””” SQL中的语句我想检查ID是否存在,如果存在,只更新编辑的值,否则创建ID和更新值。创建ID时,上面的update语句起作用 下面的代码只更新“优先级”值,而不是编辑注释时的值。此外,当我编辑“注释

我将此用作编辑表中两列的模板。编辑的条目保存在新的SQL表中,并由唯一键标识符调用

对于SQL中不存在ID的每次编辑,我需要创建ID,因此只需更新:

updatenotes SET$UPDATE\u字段,其中shop\u order='“$input[“shop\u order\u NO”]。”””

SQL中的语句我想检查ID是否存在,如果存在,只更新编辑的值,否则创建ID和更新值。创建ID时,上面的update语句起作用

下面的代码只更新“优先级”值,而不是编辑注释时的值。此外,当我编辑“注释”时,它不会创建新ID。我尝试了半天都没有成功

<?php

include_once("db_connect.php");

$input = filter_input_array(INPUT_POST);
$poznamka = $input['note'];

if ($input['action'] == 'edit') {

    $update_field='';

    if(isset($input["priority"])) {
        $update_field.= "priority='".$input["priority"]."'";
    } else if(isset($input["note"])) {
        $update_field.= "note='".$input["note"]."'";
    }

    if($update_field && $input["SHOP_ORDER_NO"]) {  
        $sql_query = "INSERT INTO notes (shop_order,priority,note) 
        VALUES ('" . $input["SHOP_ORDER_NO"] . "','" . $input["priority"] . "','" . $input["note"] . "')
        ON DUPLICATE KEY UPDATE $update_field ";

        mysqli_query($conn, $sql_query) or die("database error:".mysqli_error($conn));
    }
}
?>

该链接缺少一些内容,例如
主键
。而IODKU依赖于
唯一的
键,该键通常是不同的列

假设某些
UNIQUE
键只有一个重复值,则您的语句将仅作用于行。请提供
SHOW CREATE TABLE
和生成的SQL,以便我们指出细节

阅读有关使用
…UPDATE id=LAST\u INSERT\u id(id)
作为获取新的或旧的自动增量id的一个选项的在线文档

如果需要将IODKU应用于多行,请参见语法

INSERT INTO t (col1, col2, ...)
    ON DUPLICATE KEY UPDATE ...
    SELECT ((multiple rows from somewhere else));

但是,这不能为每个新/现有行提供自动增量ID。

您的代码容易受到SQL注入的攻击。您应该使用准备好的语句。