使用 mysqli_multi_query (php) 随着时间更新 MySQL 数据库

updating the MySQL database with time by using mysqli_multi_query (php)

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

$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 

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

您需要当时的报价。

$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 注入。

我认为使用 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;

不要使用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?