【问题标题】:Multiple INSERT not working多个 INSERT 不起作用
【发布时间】:2011-10-17 11:44:16
【问题描述】:

我有多个 If 语句,如果为真,则将数据插入数据库。问题是第二个 INSERT 语句插入了 4 次。我将如何阻止它添加重复项。同样返回的 $_POST['tshirt'] 只包含一个被插入 4 次的值。

if(isset($_POST['distance'])) {
$dist = $_POST['distance'];
$sql="INSERT INTO sportevent_parameters.Distance(value, user_ref, event) VALUES ('$dist', '$id', '$event')";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());
if(isset($_POST['tshirt'])) {
$tshrt = $_POST['tshirt'];
$sql="INSERT INTO sportevent_parameters.T_Shirt(value, user_ref, event) VALUES ('$tshrt', '$id', '$event') ON DUPLICATE KEY UPDATE";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());
if(isset($_POST['partnerid'])) {
$sql="INSERT INTO sportevent_parameters.Partner_ID(value, user_ref, event) VALUES ('$partnerid', '$id', '$event')";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());
if(isset($_POST['racecategory'])) {
$sql="INSERT INTO sportevent_parameters.Race_Category(value, user_ref, event) VALUES ('$category', '$id', '$event')";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());

什么会导致它在数据库中插入多个副本?

【问题讨论】:

  • 无论您在$_POST 中有什么值,您的代码都会向服务器发送四个查询。这是因为你有四个 mysql_query() 声明(未包含在 if 条件中)。

标签: php mysql database forms insert


【解决方案1】:

首先,please sanitise your user input before using it directly in a query!!! - 还有read this。

其次-问题是您对mysql_query() 的调用应该在if 语句中。有了你所做的,mysql_query() 无论如何都会执行,只有 SQL 语句本身被if 更改。这意味着如果第一个if 条件为真,而其他所有条件都为假,则第一条语句将被执行4 次。

将您的代码更改为:

if (isset($_POST['distance'])) {
  $dist = mysql_real_escape_string($_POST['distance']);
  $sql = "INSERT INTO sportevent_parameters.Distance(value, user_ref, event) VALUES ('$dist', '$id', '$event')";
  mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error()); 
}

// etc etc

【讨论】:

  • 您好,谢谢。这对我帮助很大。是的,我会修复那些松散的用户字段:-P
【解决方案2】:

编辑:mysql_query 应该在 if 语句中,这样如果 if 没有被调用,它就不会被调用。我还会检查您传递的变量。

PHP 不支持在一个查询中包含多个 SQL 语句。您必须将每个 SQL 语句拆分为对数据库的单独查询。

PHP 手册链接:http://php.net/manual/en/function.mysql-query.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2018-11-14
    相关资源
    最近更新 更多