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;


}
4

2 に答える 2

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();

独自のクラスで自分で行う方法を理解させます。

于 2012-02-22T20:42:53.740 に答える
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;


}

(私はnum_rowsを使用したので、コードを変更する必要はありません。クエリを実行した後のSELECT COUNT(*) AS num_rowsように参照する限り、これは何でもかまいません)。$stmt->VAR_NAME

于 2012-02-22T20:51:28.537 に答える