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