2

私は最近、Mysql_* から PDO に切り替えました。これは、MySQL データベースに接続して作業するための、より安全な新しい方法だと聞きました。

クエリ、準備など、多くの基本を学びました。

やりたいこと

現在、「Email」と「ID」という名前の 2 つのテキスト フィールドがあります。ユーザーが登録するとき、彼は自分の電子メールを入力します。登録後、彼は独自の ID を受け取ります。パスワードなしでアカウントのステータスを確認できるようにしてほしい。

メールアドレスとIDを入力して「送信」をクリックするだけです。[送信] をクリックすると、システムは同じメールと ID を持つ列があるかどうかを確認する必要があります。これらとまったく同じ電子メールと ID を持つ列がある場合、while ループを作成して、作成日などの彼のアカウントの列から情報を取得できます..

私の質問

どうすればいいですか?

私がこれまでに行ったことは次のとおりです。

if (isset($email) && isset($id) && isset($submit)) {

    $fetch = $connect->prepare("SELECT * FROM users WHERE email = :email LIMIT 1");
    $fetch->bindValue(':email', $email);
    $fetch->execute();

    $validate = $fetch->fetchColumn();
    if ($validate == 0) {
        echo 'failed';
    } else {
        echo 'not failed';
    }

    while($row = $fetch->fetch( PDO::FETCH_ASSOC )) {
    //We can fetch here...
    }

}

私の友人は、mysql_num_columns 関数を置き換える fetchColumn() を使用するように勧めてくれましたが、うまくいかないようです。

正しいメール アドレスを入力しましたが、「失敗しませんでした」ではなく「失敗しました」と表示されます。

この方法が機能しないのはなぜですか? 私はこれを間違っていましたか?

ありがとう!

4

2 に答える 2

1

columnではなく、rowsをフェッチしたいと思います。また、実際に ID を確認することもありませんが、必要に応じてクエリに条件を追加できます。AND

$fetch->execute();
if ($fetch->rowCount()) {
    echo "Row was returned; match found";
}
else {
    echo "No match found";
    exit;
}
$row = $fetch->fetch(PDO::FETCH_ASSOC);

同様にフェッチする行はおそらく 1 行しかありませんが、そうでない場合は、while上記のようにループを使用できます。

于 2013-03-28T23:29:46.597 に答える
0

$validateメールアドレスを含む文字列です。実行すると、整数にif ($validate == 0)型キャストされ、数値以外の文字列は になるため、比較は常に true になります。$validate(int) 0

に変更しif ($validate === FALSE)ます。

于 2013-03-28T23:32:46.543 に答える