同じメールがデータベースにすでに存在するかどうかを確認するために行数を取得したいと考えています。いくつかのメカニズムを試しましたが成功しませんでした。データベース内でクエリを直接実行すると行数が得られますが、PDO 経由で実行すると 0 が得られます。
fetchAll メソッドを使用して手動でカウントしましたが、rowCount メソッドを使用しても機能しません
リーリー問題は、html
を含むこの $email_f にあります。 リーリーこれは $sql から出力したクエリで、phpmyadmin のデータベースで直接実行すると正常に動作します。数値 3 が与えられていますが、実行すると 0 が得られます。
P粉5471709722024-03-27 00:16:59
まず第一に、たとえデータが正しいと断言できるとしても、クエリで行が見つからない場合は、一致するものが存在しないことを意味するという事実を受け入れる必要があります。クエリが行を返さない場合は、条件に一致する行が存在しないことを意味します。したがって、その理由を調べなければなりません。ただし、最初にクエリが正しいことを確認する必要があります:
まず、「結果がない」ということはクエリにエラーがあることを意味する可能性があるため、クエリが実際にエラーなしで実行されることを確認する必要があります。詳細については、pdo および mysqli の回答を参照してください。
「そのようなテーブル/データベースはありません」というエラーが表示される場合は、以下の「接続資格情報」のケースを参照してください。
条件を確認してください。 WHEREcol=1 ANDcol=2
などの相互に排他的な条件があります。行は決して返されません。いくつかの行が返されるようになるまで条件を単純化してから、必要な結果が得られるように条件を調整してください。
しかし、問題はありません。エラーはなく、条件は正しいので、テーブル内のデータがクエリと一致すると確信できます。ただし、落とし穴がいくつかあります:
まず、変数が関係している場合は、その変数が 存在し、実際に何らかの値が含まれていることを確認します。
次に、値自体を確認します。入力データ (またはデータベース) には、変換された文字や印刷できない文字が含まれている可能性があります。たとえば、改行や特別にエンコードされた記号、または HTML エンティティに変換される特定の文字 (< や
> など)。したがって、
<abc@abcs.com> を含むクエリは、テキスト
<abc@abcs.com> と一致することはありません。簡単に確認するには、
rawurlencode() 関数を使用します。この関数は、すべての非ラテン文字をコードに変換し、表示できるようにします。
あなたの データベース、あなたの 入力データ、そして あなただけだからです。 < strong> 問題を見つけることができます。
PDO の問題をデバッグする方法を説明する記事を書きました。 必要な特定の問題をデバッグするには
urlencode()
関数は、データベースおよび入力内のすべての印刷不可能な文字と変換可能な文字を表示するのに役立ちます。 もう 1 つの一般的な問題は、複数のデータベースがあり、要求されたデータが含まれていない間違ったデータベースに接続する場合です。この質問は この質問 に似ているため、同じルーチンに従い、テーブル リストではなくデータ行のみをチェックしてください。
これはまれな状況ですが、念のため、この 良い回答
のチェックリストに従ってください。