【发布时间】:2018-04-11 19:16:25
【问题描述】:
我想不通,我一直在阅读大量堆栈溢出线程,但我一直遇到问题,
现在,如果用户输入任何内容,无论是相同的用户名还是电子邮件,都会出现错误。请帮忙!
我希望在用户键入数据库中已有的用户名或电子邮件时显示错误消息。
$sql = "SELECT count(*) FROM users WHERE user_email = :email OR user_name = :username";
$query1 = $DBH->prepare($sql);
$query1->execute(array(':username' => $username,':email' => $email));
if ($query1->rowCount() > 0){
// User Exists
$error = "Username or E-Mail in Use";
} else{
// User Does Not Exist
//No errors - let’s create the account
//Encrypt the password with a salt
$encryptedPass = password_hash($_POST['password'], PASSWORD_DEFAULT);
//Insert DB
$query = "INSERT INTO users (user_email, user_password, user_forename, user_lastname, user_name, user_gender, user_country, user_number) VALUES (:email, :password, :firstname, :lastname, :username, :gender, :country, :mobile)";
$result = $DBH->prepare($query);
$result->bindParam(':username', $_POST['username']);
$result->bindParam(':firstname', $_POST['firstname']);
$result->bindParam(':lastname', $_POST['lastname']);
$result->bindParam(':email', $_POST['email']);
$result->bindParam(':gender', $_POST['gender']);
$result->bindParam(':country', $_POST['country']);
$result->bindParam(':mobile', $_POST['mobile']);
$result->bindParam(':password', $encryptedPass);
if($result->execute()){
echo '<div class="alert alert-success" role="alert">Registration Successful!</div>';
echo "<script> window.location.assign('index.php?p=login'); </script>";
}
}
编辑
$stmt = $DBH->prepare("SELECT COUNT(*) FROM users WHERE user_email = :email OR user_name = :username");
$stmt->execute(array(':username' => $username,':email' => $email));
$count = $stmt->fetchColumn();
var_dump($count);
if ($count > 0) {
$error1 = "Username or E-Mail in Use. Please try another.";
}
if(!$error){
//No errors - let’s create the account
//Encrypt the password with a salt
$encryptedPass = password_hash($_POST['password'], PASSWORD_DEFAULT);
//Insert DB
$query = "INSERT INTO users (user_email, user_password, user_forename, user_lastname, user_name, user_gender, user_country, user_number) VALUES (:email, :password, :firstname, :lastname, :username, :gender, :country, :mobile)";
$result = $DBH->prepare($query);
$result->bindParam(':username', $_POST['username']);
$result->bindParam(':firstname', $_POST['firstname']);
$result->bindParam(':lastname', $_POST['lastname']);
$result->bindParam(':email', $_POST['email']);
$result->bindParam(':gender', $_POST['gender']);
$result->bindParam(':country', $_POST['country']);
$result->bindParam(':mobile', $_POST['mobile']);
$result->bindParam(':password', $encryptedPass);
if($result->execute()){
echo '<div class="alert alert-success" role="alert">Registration Successful!</div>';
// echo "<script> window.location.assign('index.php?p=login'); </script>";
}
}
var dump = string(1) "0"
【问题讨论】:
-
您正在计算行数,因此它将返回
1 row和value of 0。然后您询问有多少行,即 1。您可以做的是SELECT 1 FROM ...,如果找到记录,它将返回一行,如果找不到匹配记录,则返回一个空数据集。 -
$sql = "从用户中选择 1 个用户,其中 user_email = :email OR user_name = :username"; ?我试过它不起作用,对不起,如果我做错了我对 PHP 还很陌生
-
为什么不使用
SELECT id FROM ...这将比计算所有列更快。还添加LIMIT 1可能会有所帮助 -
对不起,我根本不关注 ;(
-
如果行数大于 1,我应该如何计算行数?