P粉8264299072023-08-14 15:05:22
まず第一に、たとえデータが正しいと断言できるとしても、クエリで行が見つからない場合は、一致するものが存在しないことを意味するという事実を受け入れる必要があります。クエリが行を返さない場合、基準に一致する行はありません。したがって、その理由を調べなければなりません。ただし、最初にクエリが正しいことを確認する必要があります:
まず、クエリに実際にエラーがないことを確認する必要があります。「結果がない」ということは、クエリにエラーがあることを意味している可能性があります。詳細については、pdo および mysqli の回答を参照してください。
条件を確認してください。 WHEREcol=1 ANDcol=2
など、相互に排他的な条件がいくつかあります。行は決して返されません。いくつかの行が返されるようになるまで条件を単純化してから、必要な結果が得られるように条件を調整してください。
しかし、問題はありません。エラーはなく、条件は正しいので、クエリに一致するデータがテーブル内にあると断言できます。ただし、まだ落とし穴がいくつかあります:
まず、変数が関係する場合は、変数が存在し、実際に何らかの値が含まれていることを確認してください。
次に、値自体を確認します。入力データ (またはデータベース) には、変換された文字や印刷できない文字が含まれている可能性があります。たとえば、改行文字や特別にエンコードされた記号、または <
や >
などの一部の文字は、HTML エンティティに変換されます。その結果、<abc@abcs.com>
を含むクエリは、テキスト <abc@abcs.com>
と一致しません。簡単に確認するには、rawurlencode()
関数を使用します。この関数は、すべての非ラテン文字をコードに変換し、表示できるようにします。
問題は、これは単なる推測であり、実際の問題が何であるかを誰も教えてくれないということです。なぜなら、これは あなたの データベースであり、 あなたの 入力データであり、単なる だからです。あなたは問題を見つけることができます。
PDO の問題をデバッグする方法 を説明する記事を書きました。
特定の問題をデバッグするには、次のものが必要です:
関数が役に立ちます。データベースおよび入力内の印刷不可能な文字と変換された文字をすべて表示します。
この質問 に似ているため、データ行があるテーブルのリストをチェックする代わりに、同じ手順に従ってチェックしてください。
文字セット/エンコーディングによって引き起こされる問題良い回答 のチェックリストに従ってください。