2012-02-22 13 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'と常に同じである限り、' emailを選択する必要はありません。 'SELECT COUNT(*)'をより良く実行してください。 – zerkms

+0

*すべてがうまくいくようです。 'display_errors'はtrueに設定されていますか、エラーが記録されていますか? – Josh

+0

私はデバッグのOOPの方法に慣れていない、それは私の主な問題です、私はプログラミングOOPの方法に欲求不満を感じる。私は、コードを行うためにEclipseを使用し、コーディングを非常に簡単にするが、私はデバッグする方法を学ぶ必要がある。あなたは良いデバッグツールやPHPのソースを知っていますか? –

答えて

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(私はあなたのコードを変更する必要がないように、これはあなたがクエリを実行した後、あなたは$stmt->VAR_NAMEのようにそれを参照する限り、何もすることができNUM_ROWSを使用していました。)

2

私はmysqliのでPDOを使用する方法を知っているが、何がやりたいことは、エントリは、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 num行を返すことはありません... –

関連する問題