【问题标题】:Validating email and username in PDO在 PDO 中验证电子邮件和用户名
【发布时间】:2015-12-31 23:41:31
【问题描述】:

下面的代码是一个注册表单,在将数据插入数据库之前,我们检查如果用户名和电子邮件已经被占用,实际上它写成phpmysqli,它工作正常,但现在我正在切换到 PDO。代码工作正常并且插入了数据,但它不检查电子邮件和用户名,我的意思是我们可以使用相同的电子邮件和用户名再次插入数据。我不知道为什么它不能以这种 PDO 格式工作,它在简单的 php 标准中工作得很好可能是因为我还没有接触过 PDO。请帮我。我想要的是在将数据插入数据库之前检查电子邮件和用户名,如果它们已经被提取,则数据不会被插入,我们会收到错误消息。

 $exists = "";
 $query = $db->prepare("SELECT COUNT (username) from userss WHERE username = :username ");
 $query->execute(array(':username'=>$un));
 if ($query->fetchAll() == 1) {
 $exists .= "u";
 } 
 $query = $db->prepare("SELECT COUNT (email) from userss WHERE email = :email ");
 $query->execute(array(':email'=>$em));
 if ($query->fetchAll() == 1) {
 $exists .= "e";
 }

 if ($exists == "u") echo "<p><b>Error:</b> Username already exists!</p>";
 else if ($exists == "e") echo "<p><b>Error:</b> Email already exists!</p>";
 else if ($exists == "ue") echo "<p><b>Error:</b> Username and Email already exists!</p>";
  else {

 $stmt = "INSERT INTO userss (username,first_name,last_name,email,password,password2,) 
 VALUES (:username,:first_name,:last_name,:email,:password,:password2,)";
 $query = $db->prepare( $stmt );  
 $query->execute( array(':username'=>$un,':first_name'=>$fn,':last_name'=>$ln,':email'=>$em,
 ':password'=>$pswd,':password2'=>$pswd2,));
 if ($query->rowCount() == 1) {
  header("Location: login.php");
  } 
 else {
 echo "error";
 }

【问题讨论】:

  • 只是出于兴趣!你为什么要对密码 2 进行哈希处理,即Confirm Password?另外,为什么将其存储在数据库中? DUH" 就是这样,您可以检查用户是否输入了 2 个不同的密码,即输入错误。

标签: mysql email mysqli pdo


【解决方案1】:
$query->fetchAll() 

返回一个数组,因此您应该通过计算元素来检查是否返回了任何数据,如下所示:

if (count($query->fetchAll()) > 0)

请注意,它正在测试大于零,以防您的数据库已经有重复,这将防止更多。

【讨论】:

  • 什么不起作用?有错误信息吗?测试失败了吗?
  • 没有错误,即使已经存在用户名和电子邮件也会插入数据,我想收到错误消息,例如用户名和电子邮件已经选择另一个。
【解决方案2】:

代替

if ($query->fetchAll() == 1)

尝试:

if ($query->fetchColumn() > 0)

【讨论】:

    【解决方案3】:

    $query-&gt;fetchAll(); 将返回多维数组,而您的查询想要返回COUNT,因此使用AS 为计数创建一个别名,您的查询应该是这样的

     $query = $db->prepare("SELECT COUNT (username) AS user_count from userss WHERE username = :username ");
     $query->execute(array(':username'=>$un));
     if ($query->fetch()['user_count'] > 0) {
     $exists .= "u";
     } 
    
     $query = $db->prepare("SELECT COUNT (email) AS email_count from userss WHERE email = :email ");
     $query->execute(array(':email'=>$em));
     if ($query->fetch()['email_count'] > 0) {
     $exists .= "e";
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多