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