2012-09-07 4 views
5

可能性の重複:例えば
Php PDO::bindParam data types.. how does it work?PDO:バインディング中にdata_typeを使用する目的は何ですか?

言って、私は以下のプリペアドステートメントを持っていること:

$sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id'); 

私はそうのようなuser_idのパラメータをバインドすることができ

$sth->bindValue(':user_id', $user_id_value); 

そして、私はまだSQLインジェクションから安全です。

ただし、bindValue()はdata_typeというオプションのパラメーターでもあり、明示的なデータ型を設定できます。例:

$sth->bindValue(':user_id', $user_id_value, PDO::PARAM_INT); 

これにより、user_idが整数になることがわかります。

私の質問は、SQLインジェクションの有無にかかわらず、なぜbind_typeのdata_typeパラメータを使用するのですか?それはデータの整合性を強制するのですか?データを事前に検証している場合は、そのデータを使用することを心配する必要がありますか?私が考えなかったそれを使用することに他の利点がありますか?

答えて

-1

基本的にはそうです。 data_typesの強制は良いことです。

注射からの保護を想定していない - 長い間前、私は、バックティックと引用符と無記名のためのutf8コードを使った注射について詳述したブログ記事を見た。それは単一の文字として評価されたところでエスケープされず、したがって注射が可能です。これは対処されていないも私が言っているあなたが脆弱であると言うことはありません

- ちょうど行うための最善のことは時々ではないと仮定すると言って...

+2

あなたは質問のどの部分に答えるのですか?私はまだそれが良いことだとは別の議論を見ることはありません。それは技術的な説明ではありません。 – zerkms

+0

erm ...データ型の整合性を強制するかどうか尋ねました。使用したくない場合は使用しないでください。私はその余分な施行が好きなので私はそれを使用します。 - 少しでも助けてくれます。[メスのユーザーが言うように] –

+1

私はOPではありません。しかし、それでもなお "私はその余分な執行層が好きだから" - 技術的な説明ではない。あなたは、余分な執行層が本当に役立ち、明示的な型指定の有無に違いがある場合の例を挙げることができますか? – zerkms

関連する問題