sql >> データベース >  >> RDS >> Mysql

PDOを使用したデータベース内の行の一致に問題がある

    データに起因する問題

    ほとんどの場合、入力データ(またはデータベース)に変換された文字または印刷できない文字が含まれています。たとえば、改行文字や特殊にエンコードされた記号、または<などの一部の文字が存在する可能性があります。 および> HTMLエンティティに変換されます。その結果、クエリには <[email protected] が含まれます。> テキスト&lt; [email protected] と一致することはありません &gt;

    問題は、これは単なる推測であり、あなたのであるため、実際の問題が何であるかを誰も教えてくれないということです。 データベース、あなたの データを入力し、あなたのみ 問題を見つけることができます。

    PDOの問題をデバッグする方法 を説明する記事を書きました 。

    特定の問題をデバッグするには、

    が必要です。
    • PDOとPHPの両方で完全なエラーレポートが有効になっていることを確認してください。時折の活版印刷の誤り、スペルの誤りなどを表示するのに非常に役立ちます
    • データベース内のデータと入力の両方を精査して、違いを見つけます。 bin2hex() 関数は、データベースと入力の両方で、印刷不可能で変換されたすべての文字を明らかにするのに役立ちます。

    接続クレデンシャルが原因の問題

    もう1つのよくある問題は、複数のデータベースがあり、要求されたデータがない間違ったデータベースに接続する場合です。この問題は、これ に似ています。 、したがって、同じルーチンに従い、テーブルのリストではなくデータ行のみをチェックします。

    無関係ですが重要な注意事項

    ちなみに、それでも非常に重要です。準備されたステートメントは、カーゴカルトコード です。 何も保護しない 。これが必須の方法です be:

    $sql = 'SELECT count(*) FROM inbox WHERE uid = ? AND from_email = ?'; 
    $result = $link->prepare($sql); 
    $result->execute([$email_number,$email_f]); 
    $number_of_rows = $result->fetchColumn(); 
    



    1. STR_TO_DATE()がMariaDBでどのように機能するか

    2. SQLServerの@@MAX_PRECISIONとは何ですか?

    3. sqlalchemyを使用して、リクエストごとにデータベースエンジンに動的にバインドする方法

    4. 「マルチパート識別子」とは何ですか?なぜバインドできないのですか?