これは、私が勝手に思いつく SQL ダイアレクトの設計によるものです。習慣から、アドホック クエリを追加しorder by 0 desc
たり追加したりする人を何人か知っています。最初に通常は ID 列を選択し、2 番目に「名前」列などを選択することがよくあります。order by 1
クエリ内のフィールドの序数位置 (または * の場合はスキーマ) に基づいてクエリを実行しています。
5という名前の列を取得するには、方言と構成に適した SQL クォーティング メカニズムを使用する必要があります。例として、Microsoft Sql と Access は通常select * from tablecomments where [5]=5
;を使用します。Postgres と Oracle では を使用select * from tablecomments where "5"=5
し、Mysql では引用識別子はバックティックで引用されますselect * from tablecomments where `5`=5
。Microsoft SQL では、セッションで SET QUOTED_IDENTIFIER ON が設定されている場合、Oracle や Postgres のようなものを作成することもできます。その場合は、角かっこの代わりに引用符を使用します。
余談ですが、非常に重要なことですが、ユーザー入力を取得して SQL に直接埋め込むべきではありません。誰かが Android アプリと PHP アプリの間の HTTP 送信を傍受した場合 (Charles や Fiddler などのプロキシでは些細なことです)、任意の SQL が挿入された http 要求をリプレイできます。他のコメンターが指摘したように、代わりにパラメーター化されたクエリを使用してください。
パラメータではなくクエリ自体を変更しようとしているため、許可されたフィールド名をホワイトリストに登録することを検討する必要がある場合があります (または、送信された文字列をスキーマで表されたフィールドと比較します)。