2

これは私のテーブルです

Field                   Type            Null    Key     Default  Extra
id_key                  int(11)         NO      PRI     NULL     auto_increment
tbl_users_username      varchar(255)    YES     UNI     NULL
tbl_users_password      varchar(32)     YES             NULL
tbl_users_identifier    varchar(32)     YES             NULL
tbl_users_token         varchar(32)     YES             NULL
tbl_users_access_type   int(1)          YES             NULL
tbl_users_timeout       int(10)         YES             NULL

これは私のコードです

$query = "SELECT * FROM tbl_users where tbl_users_username = '$_POST[email_address]'" ;
$result = mysql_query($query);
if($result)
{
    echo "TRUE";        
}
else
{
    echo "FALSE";
}

データベースへの接続に問題はありません。クエリを実行すると問題が発生します。メールがテーブルにあるかどうかに関係なく、$result が返されます。ここで何が欠けていますか?メールアドレスがテーブルに存在する場合はtrue、存在しない場合はfalseをエコーするはずです。

4

6 に答える 6

1

それにもかかわらず、結果は返されます (有効なクエリを作成した場合)代わりにmysql_num_rows を使用して、メールが存在するかどうかを確認します。可能であれば実際に PDO を使用してください

于 2012-06-12T19:02:07.350 に答える
1

PHP のmysql_num_rows関数を使用すると、行数を返すことができ、ロジックが機能します。したがって、次のことを試してください。

$num = mysql_num_rows($result);
if ($num > 0) {
    echo "TRUE";
}else{
    echo "FALSE";
}
于 2012-06-12T19:02:28.810 に答える
1

クエリを印刷して、100% 期待どおりのクエリであることを確認することをお勧めします。

それに加えて、あなたはチェックしています:

$result = mysql_query($query);

if($result)

これにより、クエリからリソースが返されたかどうかが確認されます。ドキュメントに従ってクエリが有効な場合は、常にリソースが必要です。

推奨コード:

$result = mysql_query($query);

if($result)
{
    $num = mysql_num_rows($result);
    if ($num > 0)
    {
        //do logic processing here...
        echo "TRUE"; 
    }
}
else
{
   die('Invalid query: ' . mysql_error());
}

コードの説明:

  1. クエリからリソースをフェッチする
  2. 有効なリソースが返された場合は、続行して、このクエリからフェッチされたレコードの数を確認してください。
  3. リソースが返されなかった場合、else 部分は失敗メッセージをエコーし​​ます。

PDOライブラリの使用を検討することを強くお勧めします。


簡単に言えば、PDO の利点:

  1. 準備済みステートメントを簡単に使用できます (準備済みステートメントはセキュリティに優れています!!!)

  2. PDO は、MySQL を含むさまざまなデータベースに接続できますが、他のデータベースにも接続できます。

  3. 私の意見では非常に使いやすく、新規参入者などを選ぶのは非常に簡単です.


スタック オーバーフローの使用に関するヒント:

  1. 常に右上隅の検索を使用してください。多くの人があなたを助けるかもしれない問題に遭遇しました.
  2. 質問の仕方に関するよくある質問を常にご覧ください。
  3. フィードバック & 必要に応じてさらに質問してください!
于 2012-06-12T19:53:08.930 に答える
1

$_POST[email_address]私が推測する一重引用符または二重引用符を使用する必要があります:

$_POST["email_address"]また$_POST['email_address']

$query = "SELECT * FROM tbl_users where tbl_users_username = '" . $_POST['email_address'] . "'" ;

ただし、@ FabioCosta が言うように、目的を達成するには、結果をフェッチするか、返された行の数をカウントする必要があります。

$query = "SELECT 1 FROM tbl_users where tbl_users_username = '" . $_POST['email_address'] . "'";
$result = mysql_query($query);
if(mysql_num_rows($result) === 1) {
    echo "TRUE";        
} else {
    echo "FALSE";
}
于 2012-06-12T19:00:35.740 に答える
0
$query = "SELECT *
FROM tbl_users
WHERE tbl_users_username = '" . mysql_real_escape_string($_POST['email_address']) . "'";

$result = mysql_query($query) or die(mysql_error());

if($result)
{
    echo "TRUE";        
}
else
{
    echo "FALSE";
}

これにより、発生している問題が修正されるか、少なくとも対処するための便利なエラー メッセージが表示されます。

于 2012-06-13T01:18:16.733 に答える
0

次のクエリは、投稿された email_address の値に基づいて tbl_users_username の値を選択します。したがって、次のクエリを使用します。

$query = 
"SELECT * FROM tbl_users where tbl_users_username = '".$_POST['email_address']."';";
于 2012-06-12T19:01:38.740 に答える