使用 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?
我使用下面的代码将文本插入数据库并插入当前时间(只有时间而不是日期)
$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?