Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 为什么我不能使用REPLACE。我如何更新表中的一行,或者在它不存在时插入它?_Php_Mysql_Database - Fatal编程技术网

Php 为什么我不能使用REPLACE。我如何更新表中的一行,或者在它不存在时插入它?

Php 为什么我不能使用REPLACE。我如何更新表中的一行,或者在它不存在时插入它?,php,mysql,database,Php,Mysql,Database,我想更新表中的一行,或者如果它不存在就插入它 我已经阅读了这个链接中的解决方案 所以,我使用了替换,但它不起作用。它只向表中添加了新行,但没有更新任何内容。 这是我的结构 请告诉我正确的语法。我猜username是一个字段,如果它是重复的,您需要更新它。因此,如果用户名是唯一密钥,则可以执行以下操作: insert into general ([fields]) values ([values]) on duplicate username update [whatever] 我找到了解决

我想更新表中的一行,或者如果它不存在就插入它

我已经阅读了这个链接中的解决方案

所以,我使用了替换,但它不起作用。它只向表中添加了新行,但没有更新任何内容。

这是我的结构


请告诉我正确的语法。

我猜username是一个字段,如果它是重复的,您需要更新它。因此,如果用户名是唯一密钥,则可以执行以下操作:

insert into general ([fields]) values ([values])
on duplicate username update
[whatever]
我找到了解决办法。 我使用if-else条件来证明它。 这是我的代码结果

    //after upload complete insert pic data into database
    $con = mysqli_connect("localhost", "root", "root", "museum");
    $sql = "SELECT logo,bgBNPage FROM general "; 
    $result = mysqli_query($con, $sql); 


    if (!$con) {
       echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $fields = implode(', ', $sql_field_list);
    $values = implode("', '", $sql_value_list);

    if(mysqli_num_rows($result) > 0) 
    {
        $str_array = [];
        for($i =0; $i < count($sql_field_list); $i++) 
        {
            $str_array[] = $sql_field_list[$i] . "='" .  $sql_value_list[$i] ."'";
        }

        $sql = 'UPDATE general SET ' . implode(',', $str_array);
        //$sql = "UPDATE general SET (" . $fields . ") = ('" . $values . "');";
    }
    else 
    {
        $sql = "INSERT INTO general (" . $fields . ") VALUES ('" . $values . "');";
    }


    if (!mysqli_query($con, $sql)) {
        die('Error: ' . mysqli_error($con));
    }

    mysqli_close($con);

您正在执行的实际SQL查询中有哪些不起作用?如果您的SQL查询没有达到预期效果,您至少应该看看该查询是什么。您必须在$SQL\u字段\u列表和$SQL\u值\u列表中设置主键。如果不是,则replace无法识别特定行。您将在这里找到一个解释:您的解决方案不是原子的。如果记录存在,但在选择时间和更新时间之间发生不同的更新或删除,会发生什么情况?您将覆盖另一个更新,如果记录已被删除,则会出现错误。此外,您可能希望在提交查询之前检查连接。
insert into general ([fields]) values ([values])
on duplicate username update
[whatever]
    //after upload complete insert pic data into database
    $con = mysqli_connect("localhost", "root", "root", "museum");
    $sql = "SELECT logo,bgBNPage FROM general "; 
    $result = mysqli_query($con, $sql); 


    if (!$con) {
       echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $fields = implode(', ', $sql_field_list);
    $values = implode("', '", $sql_value_list);

    if(mysqli_num_rows($result) > 0) 
    {
        $str_array = [];
        for($i =0; $i < count($sql_field_list); $i++) 
        {
            $str_array[] = $sql_field_list[$i] . "='" .  $sql_value_list[$i] ."'";
        }

        $sql = 'UPDATE general SET ' . implode(',', $str_array);
        //$sql = "UPDATE general SET (" . $fields . ") = ('" . $values . "');";
    }
    else 
    {
        $sql = "INSERT INTO general (" . $fields . ") VALUES ('" . $values . "');";
    }


    if (!mysqli_query($con, $sql)) {
        die('Error: ' . mysqli_error($con));
    }

    mysqli_close($con);