SQL用新数据更新整个表


SQL Update a whole table with new data

我每15分钟运行一次查询,从API检索新数据,并将此数据存储在我的数据库中。

所以每隔15分钟,我想在表中存储新数据,并删除该表中的所有旧数据。

我目前正在使用以下方法:

$sql = "DELETE FROM self_user_follower
        INSERT INTO self_user_follower (username, profile_picture, full_name, user_id, last_updated)
        VALUES (:query_username, :query_profile_picture, :query_full_name, :query_user_id, :query_last_updated)";

但是它给了我以下错误:

Array
(
    [0] => 42000
    [1] => 1064
    [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO self_user_follower (username, profile_picture, full_name, user_id, l' at line 2
)
query_error

这是最好的方法吗?还是有更好、更干净的方法?

如果您想在一个语句字符串中放入两个SQL查询,您必须

  1. 用分号分隔(;)
  2. 使用mysqli_multi_query功能,支持多个查询。

除非你有很好的理由,否则修改你的代码,使它分别执行每个查询。如果你需要的话,mysql可以提供事务支持*

为什么 需要一个单独的函数是有指导意义的;如文档中所述:

对多个语句使用额外的API调用,以减少意外的SQL注入攻击的可能性。攻击者可能会尝试添加这样的语句;删除mysql数据库选择睡眠(999)。如果攻击者成功地将SQL添加到语句字符串中,但没有使用mysqli_multi_query,服务器将不会执行第二个注入的恶意SQL语句。

*: 实际上,我甚至不确定multi_query将在同一事务中执行两个查询-我只是猜测您使用多查询的原因。

多条语句应以分号

结束

试试这个

$sql = "DELETE FROM self_user_follower;
        INSERT INTO self_user_follower 
(username, profile_picture, full_name, user_id, last_updated)
        VALUES (:query_username, :query_profile_picture, :query_full_name, :query_user_id, 
  :query_last_updated)";