IN 演算子を使用した MySQLi Prepared Statements
開発者は、IN 演算子を使用してデータベースにクエリを実行し、以下に基づいて特定の行を取得する必要があることがよくあります。一連の値。 SQL インジェクションを防ぐにはプリペアド ステートメントの使用が推奨されますが、一部のユーザーは、IN 演算子でプリペアド ステートメントを使用しようとすると問題が発生すると報告しています。この記事では、データベース内に必要なデータが存在するにもかかわらず、プリペアド ステートメントを使用してデータを取得し、IN 演算子が結果を返さなかった特定のケースについて詳しく説明します。
提供された例では、開発者は次のようなステートメントを準備していました。 'users' テーブルから、'lastname' 列が配列で提供された一連の値の 1 つと一致する行を選択しようとしました。準備プロセスには、コンマ区切りの値を含む文字列を準備されたステートメントにバインドすることが含まれます。ただし、値がデータベースに存在する場合でも、クエリは空の結果セットを返しました。
開発者はさらに調査した結果、パラメータが準備されたステートメントにバインドされる方法に問題があることを発見しました。コードは元々、カンマ区切りの値を含む文字列を直接渡していたため、MySQL は文字列全体を値のセットではなく単一の値として処理していました。
解決策には、それぞれの値への参照の配列を渡す必要がありました。 「lastnames」配列内の値と、各値のタイプを指定する文字列。これにより、MySQL は各値を正しく認識し、個別にバインドしました。これにより、IN 演算子が意図したとおりに機能し、目的の行を正常に取得できるようになりました。
このソリューションは最も洗練された、または簡潔ではないかもしれませんが、問題に効果的に対処し、正しくバインドすることの重要性を示しています。 IN 演算子で準備されたステートメントを使用する場合のパラメーター。
以上がIN 演算子を使用した MySQLi プリペアド ステートメントが結果を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。