【问题标题】:updating the MySQL database with time by using mysqli_multi_query (php)使用 mysqli_multi_query (php) 随时间更新 MySQL 数据库
【发布时间】:2020-07-04 12:29:27
【问题描述】:

我正在使用下面的代码将文本插入数据库并插入当前时间(仅时间不是日期)

$time = date("h:i");
$query = "UPDATE a_2020 SET done = 'yes' WHERE id = '2' ;";
$query .= "UPDATE a_2020 SET nowTime = $time WHERE id = '1' ";
$result = mysqli_multi_query($con,$query);
echo mysqli_error($con);

但我每次都收到以下错误,但没有更新数据库:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE a_2020 SET nowTime = 09:23 WHERE id = '1' at line 1 

我尝试将列类型更改为日期时间、时间戳、文本...等,但没有任何结果,在您解决问题后,我还想添加另一个过去时间,并希望获得 nowTime 和过去时间之间的差异。

【问题讨论】:

    标签: php mysql mysqli mariadb mysqli-multi-query


    【解决方案1】:

    你需要随时引用。

    $time = date("h:i");
    $query = "UPDATE a_2020 SET done = 'yes' WHERE id = '2' ;";
    $query .= "UPDATE a_2020 SET nowTime = '$time' WHERE id = '1' ";
    $result = mysqli_multi_query($con,$query);
    echo mysqli_error($con);
    

    请注意,根据我的经验,使用mysqli_multi_query() 的理由很少。它几乎没有什么好处,只会让事情变得更复杂。只需拨打mysqli_query() 两次。

    通常最好使用准备好的语句,这在mysqli_multi_query() 中不可用。这样可以避免引用问题,还可以防止 SQL 注入。

    【讨论】:

    • 感谢您的回答,但如果可以的话,我想使用我的第一个代码样式,我添加了分号但不幸的是我没有得到任何结果
    • @user13113208 这是不安全的。 mysqli_multi_query 不能与参数化查询一起使用。你引用了日期时间字符串吗?更新没有显示这种变化。请参阅 Barmar 第一条评论的后半部分,You also need to put quotes around the time.
    【解决方案2】:

    我认为使用CASE 对你来说是更好的解决方案...

    UPDATE a_2020 
    SET
      done = CASE 
        WHEN id = '2' 
          THEN 'yes' 
        ELSE done 
        END
      , nowTime = CASE 
        WHEN id = '1' 
          THEN $time 
        ELSE nowTime 
        END;
    

    【讨论】:

      【解决方案3】:

      不要使用mysqli_multi_query()

      如果你想像这样执行两个查询,你应该使用准备好的语句。在您的情况下,因为您没有要在第一个查询中传递的参数,您可以使用 query()

      $time = date("h:i");
      
      $con->query("UPDATE a_2020 SET done = 'yes' WHERE id = '2'");
      
      $stmt = $con->prepare("UPDATE a_2020 SET nowTime = ? WHERE id = '1'");
      $stmt->bind_param('s', $time);
      $stmt->execute();
      

      另请阅读:How to get the error message in MySQLi?

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 2014-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多