【问题标题】:PHP/MySQL inserting more than 1 rowPHP/MySQL 插入超过 1 行
【发布时间】:2016-09-19 13:28:56
【问题描述】:

我在 MySQL 数据库中插入记录时遇到问题。 它插入 2 条或更多记录,而不是仅插入一行。 我检查了代码,文件中没有重复。 我正在使用自动填充脚本,因为它用于搜索栏。 当我在数据库中签入通知时,插入了两次相同的搜索查询,但来自不同的 IP 地址。 任何帮助将非常感激。

    //Did the member search
if(isset($_GET['searchBar'])){
    $criteria = mysql_real_escape_string($_GET['searchBar']);   
    $timest = time();
    $today = date('Y-m-d');
    $memberid = 0;

    if(isset($_SESSION['MEMBER'])){
        $memberid = $_SESSION['MEMBER'];
    }

    function get_client_ip() {
        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP'))
            $ipaddress = getenv('HTTP_CLIENT_IP');
        else if(getenv('HTTP_X_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
        else if(getenv('HTTP_X_FORWARDED'))
            $ipaddress = getenv('HTTP_X_FORWARDED');
        else if(getenv('HTTP_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        else if(getenv('HTTP_FORWARDED'))
           $ipaddress = getenv('HTTP_FORWARDED');
        else if(getenv('REMOTE_ADDR'))
            $ipaddress = getenv('REMOTE_ADDR');
        else
            $ipaddress = 'UNKNOWN';
        return $ipaddress;
    }

    $mem_ip = get_client_ip();
}
if(isset($_GET['page']))
{
    if (ctype_digit($_GET['page']))
    {
        $pageNum = $_GET['page'];
    }
}
else{
    if($criteria != ""){
   $con=mysqli_connect("localhost","USER","MYPASSWORD","DB");
    mysqli_query($con, "insert into search_queries 
    (search_query, timestamp, member_id, date, member_ip) 
    values 
    ('$criteria', '$timest', '$memberid', '$today', '$mem_ip')");
    }
}

【问题讨论】:

  • 警告:当使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET 数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 为此感谢一百万。我会做出正确的改变
  • 如果您想追踪重复项,请在每个表单上生成一个唯一 ID 并将其添加到您的搜索记录表中。请记住,许多人习惯性地无缘无故地双击按钮。
  • 好的,我会试试,让你知道我得到了什么
  • 我在日志中得到了 2 个不同的 ID?这意味着页面正在重新加载还是什么?但我找不到这个重新加载。

标签: php mysql insert


【解决方案1】:

首先你不应该使用mysql_query,因为它已被弃用阅读更多php.net。但是您可以通过添加任意数量的附加值来实现您所需要的:

INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )

【讨论】:

  • 感谢 mysql_query 的提示。我会做出这个改变。但我的问题是它只需要插入 1 而不是更多。
  • 哦,我怎么读错了你的问题:D。所以我认为这是因为脚本被执行了两次,而问题不在于这个 php 段。能否提供更多的php代码?
  • 好的,我刚刚更新了代码。如果您检查任何可能导致此问题的原因,请告诉我。非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2018-01-24
  • 1970-01-01
相关资源
最近更新 更多