1

MySQL テーブル ID を入力として受け取る関数があります。

mysql_real_escape_string を適用する代わりに、is_numeric を使用できますか?

そのようです:

protected function validId($id) {
    if(!is_numeric($id)) return false; 
    // else do stuff
}

編集:

また、私は時々これを使用したことにも言及したかった:

$val = (int)$val;

PHP ドキュメントのタイプ キャストに関するセクションは次のとおりです

また、mysql_real_escape_string を使用するたびにデータベースにアクセスする必要があると思います。整数を検証するときになぜそれを行うのですか?

編集2:

また、is_int() はフォーム入力では機能しないため、is_numeric を使用しています。しかし、おそらく次のようなことを行うと問題が解決し、より高速に動作し、サーバーの負荷が軽減されます。

protected function validId($id) {
    if(!is_numeric($id)) return false;  // confirm it is number or numeric string
    $id = (int) $id; // cast to int (will chop off decimals I believe)
    // do stuff
}
4

1 に答える 1

2

場合によります。

is_numeric16進表記を許可します。クエリで引用符で囲んでいる場合は、結果になり0ますが、そうでない場合は、正しく解釈されます。is_numericまた、同じ問題を抱えている科学的記数法も可能です。

個人的にはお勧めしますintval()が、mysql_real_escape_stringより安全です。

関数名の長さの場合は、これを実行して忘れてください。

function esc($str) {return mysql_real_escape_string($str);}
于 2012-08-09T00:21:44.077 に答える