是否有更清晰有效的方法来重写此功能?

时间:2012-03-30 17:59:25

标签: php mysql

我试图以不同的方式重写以下功能,但似乎我错过了一些东西而且我没有得到预期的功能?
任何人都可以提出任何建议吗? 提前谢谢。

功能1

function user_exists($email) {  
  $email=mysql_real_escape_string($email);
  $query=mysql_query("SELECT COUNT (`user_id`) FROM `users` WHERE `email` = '$email'");
  return(mysql_result($query, 0) == 1) ? true : false;
}

重写功能1

function user_exists($email) {  
  $email=mysql_real_escape_string($email);
  $query=mysql_query("SELECT user_id FROM users WHERE email='$email'"); 
  $count=mysql_num_rows($query);    
  if ($query !=0) {
    return(true);   
  } else{
return(false)
}

4 个答案:

答案 0 :(得分:1)

function user_exists($email) {  
    // Escape to prevent sql injection
    $email = mysql_real_escape_string($email);
    // Query to see if the email exists in the DB
    if(false === ($query = mysql_query("SELECT user_id FROM users WHERE email='$email'"))){
        // handle error
        $result = false;
    }  
    else{
        // Find a row?  Email exists, otherwise does not
        $result = (mysql_num_rows($query) > 0);
    }

    return $result;
}

数据库查询本身可能更有效(选择一个计数,或者至少限制为最多1个结果),但这是一般的想法。

答案 1 :(得分:1)

function user_exists($email) 
{  
   $email = mysql_real_escape_string($email);
   $query = mysql_query("SELECT user_id FROM users WHERE email='$email'");  
   if (mysql_num_rows($query) > 0) 
   {
      return true; 
   }
   else
   {
      return false;
   }
}

答案 2 :(得分:1)

function user_exists($email) {  
  $email=mysql_real_escape_string($email);
  $query=mysql_query("SELECT user_id FROM users WHERE email='$email' LIMIT 1"); 
  return mysql_num_rows($query) == 1;    
}

LIMIT 1是一个很好的做法,因为引擎停止搜索第一个匹配并且不会继续下一行

答案 3 :(得分:-1)

<?php
function user_exists($email) 
{ 
     // Perform database query
     $email = mysql_query("SELECT user_id FROM users WHERE email='$email'");
     if (!$email) {
          die("Database query failed: " . mysql_error());
     }

     // Use returned data
     while ($row = mysql_real_escape_string($email)) {
          if ($row !=0) {
               return(true);   
          }
     }
}
?>