2011-01-10 3 views
0

のは、私はこのクエリを持っているとしましょう:MySQLクエリを実行する際に間違った値を取得する方法は?

SELECT * 
FROM students_results 
WHERE full_name LIKE '".trim($_POST['full_name'])."' 
AND mother_name LIKE '".$database->escape_value(trim($_POST['mother_name']))."' 
AND birthday = '".$database->escape_value($_POST['year2'])."'" 

は、私は彼が間違った名前または間違った母名または間違った年に入ったことを彼に伝えるためにvistorのためのメッセージを表示する必要があります。

ここで間違った値を入力したというメッセージが表示され、間違った値についての詳細な情報を表示します。

ありがとうございます。

+2

私はあなたの質問が完全に理解していません - クエリを実行する前にこれらの値を確認し、たとえば –

+0

というメッセージを表示する必要があります。ユーザーが間違った名前と年を入力した場合、あなたが間違った名前を入力したことを彼に伝えたい。私はそれをどのようにすることができますか? – Saleh

+1

LIKEを使用しないでくださいuse = – cristian

答えて

3

やや面倒は:

SELECT 
    IF(`full_name` = ?,1,0) 
    | IF(`maiden_name` = ?,2,0) 
    | IF(`birthday` = ?,4,0) 
    AS `correctness_mask` 
WHERE 
     `full_name` = ? 
    OR `maiden_name` = ? 
    OR `birthday` = ? 
HAVING 
    `correctness_mask` != 0 

取り出された行のために、correctness_mask 7(1 | 2 | 4)で、場合は、右の行を持っています。他のすべての行については、そのマスク内の適切なビットが設定されているかどうかをチェックする必要があります。

ところで、クエリの疑問符に注意してください。クエリ文字列に直接$_POSTの値を補間するのではなく、prepared statementsを使用するという暗黙のヒントです。

+0

Argh。遅すぎる。すでにdownvoteを得ました。私は 'HAVING'節が余分になると考えました... –

+0

PHPコードでこのクエリを適用することを知らないので、このクエリの完全な例をPHPコードで提供できますか? – Saleh

+0

@SzamDev私のすべての神経はそれをしないと叫ぶ。私はそれが何であるかを知っていない、あなたがC/Pにする良いチャンスがあると信じています。あなたは準備されたステートメントのリンクを読んでみて、試したことを試してみてください。 –

2

実行時に間違った値を取得する方法 MySQLクエリ?

できません。

John Smithの例を挙げると、Annと命名された母親と1/1/70の間に生まれた人と、Aliceという名前の母親と一緒に1/1/80生まれの人物があります。

年長のジョン・スミスが1/1/70とアリスに入ると、若いジョン・スミスが間違った誕生日に入ったのではないことはどうして分かりますか?

あなたは確信することができませんでした。

+0

私は似たようなことを言うつもりだった。たとえどの値が "間違っている"かを知る方法を見つけたとしても、ユーザーにそれを伝えれば、基本的にデータセットを照会し、あなたが思っていると思っているものより多くを学ぶことができます。 –

+0

@スヴェミル:合意。 ircmaxellは、このようなものがセキュリティのために使用された場合、実際にはどの情報が正しいかを伝えるため、どの情報が間違っているかをユーザーに伝えることが難しいとの質問のコメントを説明しています。さらに、間違ったフィールドにのみブルートフォースを集中させることができ、時間を節約できます。 – webbiedave

0

あなたはphpというタグを付けました。結果をDBに送信し、結果が戻ってきたかどうかを判断するには、Php Mysql Ref.を使用する必要があります。あなたは、mysql_fetch_rowを使ってユーザにどんなメッセージを表示しても、もしあれば、カップルを表示することができます。

+1

そしてこの答えのポイントは?ドキュメントへのリンク以外に提供される情報(実際には関係ない)... ... – ircmaxell

0

Students_resultsテーブルに生徒の名前、母親の名前、生年月日がある場合、データベースは十分に正規化されていないと思います。正規化はあなたの問題を解決することもできます。 student_idを使用して、name + mother name + bdateの組み合わせの代わりに正しい行を識別できます。

関連する問題