如何在一个查询中创建两个更新语句?

Posted

技术标签:

【中文标题】如何在一个查询中创建两个更新语句?【英文标题】:How to create two update statements in one query? 【发布时间】:2017-08-07 12:10:02 【问题描述】:

我正在制作一个表单,您可以在其中从 phpmyadmin 插入、更新和删除数据库 welkom 中的数据。这是我的文件Formmenu.php。 PS:此代码包含荷兰语。

PHP

<?php
    if ( ! empty($_POST))
     
            $mysqli = new mysqli('localhost','root','','welkom');

            if ($mysqli ->connect_error) 
            
                die('connect error: '. $mysqli->connect_errno . ': ' . $mysqli->connect_error);
            

                if (isset($_POST['insert'])) 
                     $sql = "INSERT INTO abdijbieren (naam, prijs) VALUES ('$mysqli->real_escape_string($_POST['naam'])','$mysqli->real_escape_string($_POST['prijs'])');";

                 else if (isset($_POST['delete'])) 
                    $sql = "DELETE FROM abdijbieren WHERE naam ='$mysqli->real_escape_string($_POST['naam'])';";
                
                  else if (isset($_POST['update'])) 
                    $sql = "UPDATE abdijbieren SET id='$mysqli->real_escape_string($_POST['id'])' WHERE naam='$mysqli->real_escape_string($_POST['naam'])'; UPDATE abdijbieren SET prijs='$mysqli->real_escape_string($_POST['prijs'])' WHERE naam='$mysqli->real_escape_string($_POST['naam'])';";
                

                  else 
                      /*nothing*/
                  



           $insert = $mysqli->query($sql);

            if ($insert)
            
                echo "Success! Keer terug naar de volgende pagina om te updaten.";
            else
            
                die("Error: $mysqli->errno : $mysqli->error");
            



            $mysqli->close();
        

    ?>   

表格

<form method="post" action="">
              <input name="naam" type="text" placeholder="naam drank" required><br>
              <input name="prijs" type="text" placeholder="prijs" required><br>
              <input name="id" type="text" placeholder="tracking number*"><br><br>

        <input type="submit" name="insert" value="insert">
        <input type="submit" name="delete" value="delete">
        <input type="submit" name="update" value="update"><br>
        *= niet nodig bij "insert".
        </form>

这就是我所关注的:

$sql = "UPDATE abdijbieren SET id='$mysqli->real_escape_string($_POST['id'])' WHERE naam='$mysqli->real_escape_string($_POST['naam'])'; UPDATE abdijbieren SET prijs='$mysqli->real_escape_string($_POST['prijs'])' WHERE naam='$mysqli->real_escape_string($_POST['naam'])';";

当我尝试提交表单后收到错误 #1064 的代码时。错误呼应;

错误:1064:您的 SQL 语法有错误;检查手册 对应于正确语法的 MariaDB 服务器版本 在 'UPDATE abdijbieren SET prijs='5.00 EUR' WHERE id='9' 附近使用; 在第 2 行更新 a'

我不确定这是拼写错误还是 real_escape_string。我试着用这个寻找解决方案:

How do I combine two UPDATE statements in one MySQL query? Update a row mysql in php

第二个链接的问题仍未解决。我检查了我的代码,它看起来不错,但是在收到错误 #1064 后,我对代码感到困惑。我需要有关此问题的帮助。

谢谢。

【问题讨论】:

如果您必须在一次执行中执行此操作,请使用multi_query,但您也可以在一次查询中更新这两个字段.. 【参考方案1】:

您可以在单个语句中更新多个列:

$sql = "UPDATE abdijbieren 
           SET id = '" . $mysqli->real_escape_string($_POST['id']) . "',
               prijs = '" . $mysqli->real_escape_string($_POST['prijs']) . "' 
         WHERE naam='" . $mysqli->real_escape_string($_POST['naam']) . "'"

【讨论】:

你知道在查询中直接注入$_POST 值是错误的 @MasivuyeCokile 它们不会直接注入到查询中。只要使用real_escape_string方法是安全的。我只是帮他理解了查询必须如何完成。SQL注入不是这个问题的一部分。。 那好吧,但你可能只是给出一些建议,这样他就可以知道他在做什么不安全 我刚刚告诉你,只要他使用$mysqli-&gt;real_escape_string()方法就安全了。直接使用变量是不安全的,必须使用绑定的情况下 将不得不在那个问题上不同意你的意见【参考方案2】:

试试这个:

 $sql = "UPDATE abdijbieren SET id='$mysqli->real_escape_string($_POST['id'])' , prijs='$mysqli->real_escape_string($_POST['prijs'])' WHERE naam='$mysqli->real_escape_string($_POST['naam'])'";

【讨论】:

【参考方案3】:

不需要对每一列执行更新查询;你可以通过使用这样的查询来实现这一点:

'update table_name set col_1="col_1_value", col_2 ="col_2_value" where your_condition = abc';

【讨论】:

以上是关于如何在一个查询中创建两个更新语句?的主要内容,如果未能解决你的问题,请参考以下文章

DBT 模型:如何从查询中创建变量并在 If 语句中使用它

我们如何在与其他查询的事务中创建 VIEW?

如何使用多个 for 循环在 php 中创建 sql 语句

如何在 grafana 中创建普罗米修斯图来划分两个查询?

如何在 UITableView 的 switch 语句中创建变量?

如何在 Spark Table 中创建索引?