お世話になっております。
例えばURLにあるデータが含まれていて、その値を使ってDBからSELECTする処理をする場合についてお伺いしたく投稿しました。
※タグをPHPにしましたが、考え方の話なので言語は問いません。
【前提】 user.id = 1 のリソースにアクセスする場合のURL /user/1 ↓ WHERE user.id = 1 のようなSELECT文が発行される。 テーブルのidはinteger型
このとき入力値検査として、パラメータをint型にCastして判定するのは、方法としてアリでしょうか?
具体的には下記の通りです。
- 期待する値(数字)の場合はCastしても数字のままなので、
WHERE id = 1
で問題なく検索できる。 - 期待しない、例えば文字列に変えられた場合は、Castされて0になるので、
WHERE id = 0
となり、(多分結果はヒットはしないが)DBのCastエラーにはならない。
PHP
1/user/1 # (int)1 => 1のままなので WHERE id = 1 2/user/hoge # (int)hoge => 0になるので WHERE id = 0 3 4※castしない場合 5/user/hoge # WHERE id = hoge となり、DBエラーが発生
本来のCastの用途ではない気がするので、このような記述をしていいものか迷っています。
関数や正規表現で、数字と文字列を区別して処理するべきでしょうか(コードが増えるので敬遠してます。。)
皆様のご意見、または「以前こう書いてるのを見た」というような体験談でも結構です。
よろしくお願いいたします!
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/19 09:09