-2

常に false を返すため、mysql_num_rows の問題と戦っています。

$mail=$_POST[mail];

$q="select * from info where email='$mail'";

$query2=mysql_query($q,$con);


$rows = mysql_num_rows($query2);


if($rows > 0){
// Here we are checking if username is already exist or not.
echo "<script>newmail()</script>";
exit;
}  

既存のメールを追加しているにもかかわら$rows>0、私はそれをエコーし​​ようとしましたが、おそらく false を返すため、何も得られません。

ご清聴ありがとうございました。

4

4 に答える 4

1

まず、 $_POSTが引用符で囲まecho $qれているため、正しくスライスされていないことがわかります。$_POST['mail']これが、キー付き配列を参照する方法です

次に、データベース クエリに対して文字列連結を行わないでください(または mysql_ を使用してください)。mysql_* 関数は推奨されておらず、潜在的に危険であり、最終的には機能しなくなります。代わりにPDOを使用してください。そうしないと、ある時点ですべてをリファクタリングすることになり、既知の脆弱性をコードに導入することになります。

「PHP で SQL インジェクションを防ぐ方法は?」を参照してください。、2008 年からの質問、および2005 年からのパラメーター化された SQL を与えてください、または私に死を与えてください

編集:

あなたの目標は何ですか?特定の電子メールを持つエントリの数を数えますよね? データベースからすべてを取得するわけではありません。MySQL には、COUNTこの目的のための関数がありますSELECT COUNT(mail) FROM info WHERE mail = ?1(これは準備済みステートメントのバージョンです。よく読んでください)。次に、結果には 1 つの行のみが含まれ、それ自体がクエリに一致するデータベース内の行数になります。この種のロジックをデータベースにプッシュする方が、PHP で行うよりもはるかに効率的です。特に、大規模なデータベースです。

さて、明らかでより差し迫った問題は、クエリが失敗していることです。MySQL シェルを開いて入力するとselect * from info where email='email@example.com';、結果またはエラーが表示されますか? おそらくエラーです。というテーブルがありますinfoか? 正しいデータベースに接続していますか? 上記の他のリンクされた質問は、これらの問題に対処しています。

于 2013-07-25T03:18:50.433 に答える
0

あなたの場合、mysql_num_rows()クエリが一致しないため、常に0を返します。これは、存在しない変数で定義された変数に基づいています。

前述のように、$_POST[mail]引用符 : が必要$_POST['mail']です。

デバッグ コンテキストでは、var_dump()テストに使用する$mail and $_POST['mail']ことができます ('mail' に引用符がないことがわかります)。単純な よりもはるかに多くの情報を提供しますecho

echobooleanNULLおよび空の値を使用すると、同じように表示される場合があります (何も表示されません) 。を使用var_dump()すると、変数の性質を知ることができます。投稿入力で使用すると、string(0)単に空であるNULLことを意味しますが、存在しないため構文エラーが発生したことを意味する場合があります。

また、クエリを SQL インジェクションから保護する必要があります。PDO を使用する必要がありますが、このクイック フィックス コンテキストでは使用することもできますmysql_real_escape_string()

于 2013-07-25T08:53:20.980 に答える
0

まず、 を に変更することをお勧めし$_POST[mail]ます$_POST['mail']

それでも問題が解決しない場合はecho $q;、コードのどこかにステートメントを追加して、本当にクエリするつもりだったものをクエリしていることを確認してください。

于 2013-07-25T03:17:25.883 に答える
-1

変えようとしている

$mail=$_POST[mail]; 

$mail=$_POST['mail'];

また、適切な構文のために、次のように MYSQL を大文字にします。

SELECT * FROM info WHERE email='$mail'
于 2013-07-25T03:15:43.490 に答える