【问题标题】:Check for duplicates, PHP & MySQL [closed]检查重复项、PHP 和 MySQL [关闭]
【发布时间】:2014-11-13 05:37:10
【问题描述】:

我有以下代码,效果很好。如果他输入的电子邮件地址已经存在于数据库中,我希望用户收到一条错误消息! 谢谢!

 $con=mysqli_connect("xxxx.com","xxxx_xxx","xxxx","yyyyy_");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}


$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$password = mysqli_real_escape_string($con, $_POST['password']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$address = mysqli_real_escape_string($con, $_POST['address']);
$postcode = mysqli_real_escape_string($con, $_POST['postcode']);
$country = mysqli_real_escape_string($con, $_POST['country']);
$phonenumber = mysqli_real_escape_string($con, $_POST['phonenumber']);
$rating = mysqli_real_escape_string($con, $_POST['rating']);

$sql="INSERT INTO customers (firstname, lastname, password, email, address, postcode,   country, phonenumber, rating)
VALUES ('$firstname', '$lastname', '$password', '$email', '$address', '$postcode', '$country', '$phonenumber', '$rating')";

if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);

【问题讨论】:

  • 你在问之前没有谷歌这个吗?使用mysqli_num_rows()
  • snicker 你太可笑了@Fred-ii- Google 太难了。
  • @JayBlanchard 那不是巧克力棒吗?现在你已经完成了,我现在有零食了。 士力架
  • 我曾经在巧克力吧点了一杯饮料...@Fred-ii-
  • @MixalisPapoulakis:*咳嗽* 独特的*咳嗽*。

标签: php mysql mysqli duplicates


【解决方案1】:

在这里,使用prepared statements 方法和num_rows()

$con = new mysqli("localhost", "user", "password", "database");
if ($con->connect_errno) {
    echo "Failed to connect to MySQL: (" . $con->connect_errno . ") " . $con->connect_error;
}

$check_email = $con->prepare("SELECT * FROM customers WHERE email=?");
    $check_email->bind_param("s", $email);
    $check_email->execute();
    $check_email->store_result(); 
    $row_check = $check_email->num_rows;

if($row_check  > 0 ) {

// your error message or make it die.

$check_email->close(); 
$con->close();

}

另一种确保数据库中不存在重复记录的方法是将您的列设为UNIQUE


或:

$check_email = mysqli_query($con, "SELECT * FROM customers where email= '".$email."' ");

$numrows=mysqli_num_rows($check_email);

if($numrows > 0){
    die("Email exists already.");
}

else {

    echo "Does NOT exist."; // continue and insert into DB

}

使用准备好的语句方法更好更安全。

【讨论】:

    【解决方案2】:

    使用 select 语句检索输入电子邮件的行并检查行数是否> 0。

    【讨论】:

    • 如果 OP 将电子邮件列设置为唯一,则会引发错误。无需单独查询。
    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多