【问题标题】:PHP is inserting two duplicate rows in MYSQL databasePHP 在 MYSQL 数据库中插入两个重复的行
【发布时间】:2013-03-18 22:27:33
【问题描述】:

我在使用 PHP 和 MYSQL 时遇到问题。我有一个 HTML 表单,提交时运行以下 PHP 脚本。问题是以下 PHP 代码将数据插入数据库两次。我认为这与以下 PHP 而不是数据库有关:

<?php

$first_name = $_POST['firstname'];
$last_name = $_POST['lastname'];
$display_name = $_POST['displayname'];
$email = $_POST['email'];
$password = $_POST['password'];
$add_line1 = $_POST['addline1'];
$add_line2 = $_POST['addline2'];
$city = $_POST['city'];
$county = $_POST['county'];
$postcode = $_POST['postcode'];

$sql = "INSERT INTO members (memberID, 
memberPassword, 
memberFirstName, 
memberLastName,
memberAddressLine1, 
memberAddressLine2, 
memberCity,
memberCounty, 
memberPostcode, 
memberDisplayName) 
VALUES ('$email', 
'$password', '$first_name', '$last_name',
 '$add_line1', '$add_line2','$city',
 '$county', '$postcode', '$display_name')";

if (!mysqli_query($conn,$sql))
{
     die('Error: ' . mysqli_error($conn));
}
mysqli_query($conn,$sql);
echo 'Guest Added';
mysqli_close($conn);

?>

【问题讨论】:

    标签: php html mysql


    【解决方案1】:
    if (!mysqli_query($conn,$sql))
    {
         die('Error: ' . mysqli_error($conn));
    }
    mysqli_query($conn,$sql);
    

    您的代码中有两次mysqli_query($conn,$sql);。一次在 if() 中,一次在外面。这些中的每一个都将插入到您的数据库中。

    这里要注意的一点是,if 中的mysqli_query 是被求值的——也就是说,它运行并且 if 语句在函数调用的结果上执行。因此,您无需再次调用它。

    【讨论】:

    • 是的; mysqli_query($conn,$sql); 可以删除,只需将 else{} 添加到 if-statement 并在那里回显“Guest added”消息,作为成功的指标。
    • 感谢您的帮助 - 在评估时没有意识到它运行了。
    【解决方案2】:

    Tushar 指出了双 mysqli 查询,他是对的,除此之外,现在的代码会导致您的安全问题,因为它允许 sql 注入......

    请修改您的代码如下:

     $first_name   = mysqli_escape_string($conn, $_POST['firstname']);
     $last_name    = mysqli_escape_string($conn, $_POST['lastname']);
     $display_name = mysqli_escape_string($conn, $_POST['displayname']);
     $email        = mysqli_escape_string($conn, $_POST['email']);
     $password     = mysqli_escape_string($conn, $_POST['password']);
     $add_line1    = mysqli_escape_string($conn, $_POST['addline1']);
     $add_line2    = mysqli_escape_string($conn, $_POST['addline2']);
     $city         = mysqli_escape_string($conn, $_POST['city']);
     $county       = mysqli_escape_string($conn, $_POST['county']);
     $postcode     = mysqli_escape_string($conn, $_POST['postcode']);
    

    【讨论】:

    • 很好的建议 - PHP 新手和安全方面的好知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2014-02-10
    • 2017-06-09
    相关资源
    最近更新 更多