通过 GET 更新 n 插入


Update n Insert throught GET

这是我的代码:

if (isset($_GET['id']) && !empty($_GET['id'])) {
    $deal_update_sql = "UPDATE mydb.nl_dailydeals SET storeid = '5', cultureid = '10' WHERE product_id = ".$_GET["id"];
    $result = mysql_query($deal_update_sql);
}
else {
    $insert_query = "INSERT INTO admin_zuki_be.nl_dailydeals (product_id, storeid) VALUES (3, 2)";
    $result = mysql_query($insert_query);
}

此代码不起作用。无论我通过 GET 在 URL 中传递什么 id,都应该将其插入到数据库中。如果数据库中已存在该 id,则它应使用给定的 id 更新记录。

我该如何解决这个问题?

三个要点:

  1. 您的代码非常容易受到 SQL 注入的影响,因为您没有清理您的输入。在查询中使用输入之前,请使用mysqli_real_escape_string清理输入。

     $id = mysqli_real_escape_string($link, $GET['id']); //Link will be your connection variable
    
  2. mysql_* 函数已弃用。不要使用它们。请改用mysqli_* 函数。

  3. 逻辑是错误的。

     if (isset GET id) {
      check if id exists in db using select query
      If  (id exists in db)
            update query
      else 
            insert query
    }
    

代码将是:

   if (isset($_GET['id']) && !empty($_GET['id'])) {
       $id = mysqli_real_escape_string($link, $GET['id']); //Link will be your connection variable
       $query = "SELECT product_id FROM mydb.nl_dailydeals WHERE product_id=". $id;
       if ($result = mysqli_query($link, $query)) {
              //run your UPDATE query
        } else {
            // run your insert query
        }

使用以下行:

 $result = mysql_query($deal_update_sql) or die(mysql_error());

如果查询失败,它将告诉您错误是什么。不过,将 die() 从生产代码中删除。

我怀疑您的问题是您试图更新不存在的记录。您需要检查product_id是否存在,如果存在,则更新它,如果它没有插入它。