2012-02-22 162 views
4

我在这个类中有这个函数或方法,但是当我插入一个电子邮件时它不返回行数。我测试了mysql连接等,他们都工作。还要注意,我通过该方法传递的电子邮件已经存在于数据库中。我的计划是获得行数,如果它大于零,这意味着我们已经在数据库中有这个电子邮件。检查数据库中是否存在电子邮件?

public function userExist($email) { 
    $query = "SELECT email FROM " . USER_TABLE . " WHERE email = ?"; 

    $stmt = $this->_db->prepare($query); 

    $stmt->bind_param("s", $email); 

    if ($stmt->execute()) { 
     $stmt->store_result(); 
     return $stmt->num_rows; 
    } 
     return false; 


} 
+1

只要它始终等于'$ email',您就不需要'选择电子邮件'。更好地执行'SELECT COUNT(*)' – zerkms 2012-02-22 20:42:45

+0

所有*似乎都很好。 'display_errors'设置为true,或者记录错误? – Josh 2012-02-22 20:48:56

+0

我不熟悉OOP的调试方式,这是我的主要问题,通过编程OOP方式让我感到沮丧。我使用eclipse来完成编码,并使编码变得更容易,但我需要学习如何调试。你知道一个好的调试工具或源代码的PHP? – 2012-02-22 21:02:39

回答

1
public function userExist($email) { 
$query = "SELECT COUNT(*) AS num_rows FROM " . USER_TABLE . " WHERE email = ?"; 

$stmt = $this->_db->prepare($query); 

$stmt->bind_param("s", $email); 

if ($stmt->execute()) { 
    $stmt->store_result(); 
    return $stmt->num_rows; 
} 
    return false; 


} 

你去那里,通知SELECT COUNT(*) AS num_rows(我用NUM_ROWS所以你不会有改变你的代码,这可以是任何东西,只要你引用它像$stmt->VAR_NAME执行查询后)。

2

我不知道如何使用PDO与mysqli的,但你想要做的是检查是否存在的条目用mysql EXISTS功能,比获取结果(这是百达1或0)。

SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = ?) as email_exists 

在上面的查询,email_exists将是1或0,这取决于阉羊的电子邮件已经是表中或没有。

随着PDO我会做这样的:

$sth = $dbh->prepare("SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = :email)"); 
$sth->execute(array('email' => $email)); 
return $sth->fetchColumn(); 

我会让你知道如何给自己用自己的类来完成它。

+0

感谢您的黑客,但我宁愿知道,这是什么,我搞砸了,不返回mysqli数行... – 2012-02-22 20:50:16

相关问题