【问题标题】:Inserting data into Mysql with PHP while loop使用PHP while循环将数据插入Mysql
【发布时间】:2019-01-21 07:19:36
【问题描述】:

我正在尝试对照我的数据库检查一封电子邮件,如果它不存在,请将其添加到数据库中。

$query = "SELECT * FROM users";

$inputQuery = "INSERT INTO users (`email`, 
`password`) VALUES ('$emailInput', 
'$passInput')";

$emailInput = ($_POST['email']);

$passInput = ($_POST['password']);


if ($result = mysqli_query($link, $query)) { 

    while ($row = mysqli_fetch_array($result)) { 
        if ($row['email'] == $emailInput) { 
            echo "We already have that email!";
        } else {
            mysqli_query($link, $inputQuery);
            echo "Hopefully that's been added to the database!";
        }
    }
};

它可以检测到现有的电子邮件,它只是添加位...

目前这似乎为每个现有行添加一个新的空行(大小加倍)。 我试图理解为什么它不添加信息,以及如何以某种方式逃避循环。

另外,每个人似乎都重用了 $query,但这对我来说似乎很奇怪。像我在这里一样单独命名查询是一种好习惯吗?

如果还有什么需要补充的,请告诉我。

【问题讨论】:

  • 您最好 1) 使用参数化查询 2) 在 select 上使用 where 子句,这样您就不必遍历表中的每一行 3) 散列您的用户密码。目前,如果您的第一行与输入的电子邮件不匹配,则您正在输入新行。
  • 如果用户 B 在用户 A 仍在检查时插入电子邮件怎么办?

标签: php mysql while-loop insert naming-conventions


【解决方案1】:

我不会谈论标准,而是直接、简单地回答您的问题。

方法 - 1:

INSERT INTO users (`email`,`password`) SELECT '$emailInput', '$passInput' from DUAL WHERE NOT EXISTS (select * from users where `email` = '$emailInput');

方法 - 2: - 在email 列上创建唯一键 - 使用 INSERT IGNORE 选项。

user3783243 cmets 值得注意

【讨论】:

    【解决方案2】:

    试试这个:

    $emailInput = mysqli_real_escape_string($link, $_POST['email']);
    $passInput = mysqli_real_escape_string($link, $_POST['password']);
    
    $qry3=mysqli_query($link,"select * from users where `email`='".$emailInput."'");
    $num=mysqli_num_rows($qry3);
    if($num==1) {
    
        echo "Email-Id already exists";
    
    } else {
    
        $inputQuery = mysqli_query($link,"INSERT INTO users (`email`, `password`) VALUES ('".$emailInput."', '".$passInput."')");
        if ($inputQuery) { 
            echo "Hopefully that's been added to the database!";
        }
    }
    

    【讨论】:

    • 感谢这项工作,对于每个人的意见,有很多事情需要考虑。做到这一点的是 mysqli_num_rows > 0
    【解决方案3】:

    您的代码似乎有点过度设计,因为为什么不通过您 $_POST['email'] 来选择查询 where 子句 “SELECT * FROM users where email = $emailInput”,然后检查它是否已经存在。 另外,请记住,这只是一个示例,您应该始终检查和清理用户输入。 另一方面,您可以仅使用 INSERT ... ON DUPLICATE KEY UPDATE 语法对 MySQL 进行操作。 https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html 这需要为电子邮件列添加唯一键。

    【讨论】:

    • 我不建议在找到现有电子邮件地址时更新用户。
    猜你喜欢
    • 2012-04-23
    • 1970-01-01
    • 2020-05-13
    • 2015-01-14
    • 2018-10-04
    • 2022-01-07
    • 2015-12-22
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多