SQLクエリパラメータがSQLインジェクションに対する優れた防御策であることは事実です。埋め込まれた引用符やその他の特殊文字は、いたずらをすることはできません。
ただし、SQLクエリの一部のコンポーネントはパラメータ化できません。たとえば、テーブル名、列名、SQLキーワード。
$sql = "SELECT * FROM MyTable ORDER BY {$columnname} {$ASC_or_DESC}";
したがって、SQLクエリに補間する前に検証する必要がある動的コンテンツの例がいくつかあります。値をホワイトリストに登録することも良い手法です。
また、列のデータ型で許可されているが無意味な値を持つこともできます。このような場合、SQL制約で検証するよりも、アプリケーションコードを使用して検証する方が簡単なことがよくあります。
クレジットカード番号を保存するとします。クレジットカード番号には有効なパターンがあり、ライブラリは無効な番号から有効な番号を認識します。
または、ユーザーが自分のパスワードを定義するときはどうですか?十分なパスワード強度を確保するか、ユーザーが2つのパスワード入力フィールドに同じ文字列を入力したことを検証することをお勧めします。
または、ある数量の商品を注文する場合は、その数量を整数として保存する必要がありますが、ゼロより大きいことを確認し、1000より大きい場合は、ユーザーに次のことを再確認する必要があります。彼らはそれを正しく入力しました。