-1

基本的に、フォームから 4 つの変数から値を取得し、それらの値を WHERE ステートメントとして使用して、DB のテーブルから選択しています。正しい値がフォームから問題の変数に送られていることを確認したため、ここではコードのスニペットのみを提供しています。コードはうまく機能し、チェックのみを行っているときに if ステートメントを通過して else ステートメントに移動します。グループ ID とメンバー ID。

groupid は 4 桁の数字です。memberid は 3 桁の数字です。name は John A. Smith のような氏名で、dob は 1900-10-31 のような日付です

私が実行しようとしているクエリは以下のとおりです。MySQL エラーが発生した後、「メンバーが存在しません」というメッセージが表示されます。ここで何が欠けていますか?

$qry="SELECT * FROM members WHERE groupid = $groupid AND memberid = $memberid AND   membername = $name AND memberdob = $dob";
$result=mysql_query($qry);

if(mysql_num_rows($result) == 0)
    {
    echo "Member does not exist";
    }
 else  {....
4

3 に答える 3

2

groupid は 4 桁の数字です。memberid は 3 桁の数字です。name は John A. Smith のような氏名で、dob は 1900-10-31 のような日付です

それがあなたの考えです。ゴールデン ルール: user からの入力は一切信用しないでください。

mysql 拡張機能に固執したい場合は、まず、入力を .xml でサニタイズしますmysql_real_escape_string。次に、クエリに渡す変数を引用符で囲みます。だから、代わりに

$qry = "... WHERE groupid = $groupid ...";

行う

$qry = "... WHERE groupid = '" . mysql_real_escape_string($groupid) . "'...";

あなたの場合、クエリが失敗する最も可能性の高い理由は$name変数です。スペースが含まれています。スペースはクエリが壊れる場所です。変数を引用すると問題が解決します。

$qry = "SELECT *
        FROM members
        WHERE groupid = '" . mysql_real_escape_string($groupid) . "'
        AND memberid = '" . mysql_real_escape_string($memberid) . "'
        AND membername = '" . mysql_real_escape_string($name) . "'
        AND memberdob = '" . mysql_real_escape_string($dob) . "'";

また、エラー処理を使用してクエリの実行を改善します。簡単な例:

$result = mysql_query($qry) or die('Invalid query: ' . mysql_error());

これにより、根本原因を特定するのに役立つ詳細なエラーの説明が返されます。

推奨されていない mysql 拡張機能の推奨される代替手段については、PHP マニュアルの API の選択についてお読みください。

于 2012-07-12T21:14:27.777 に答える