3
使用MySQL和PHP,一個典型的(PDO)查詢看起來是這樣的:消毒查詢使用in_array()
// prepare the query
$q = $DB->prepare("SELECT * FROM table_name WHERE property = :value");
// run the query
$q->execute(array(':value'=>$value));
這是SQL注入安全的,因爲屬性值被單獨處理,查詢。
但是,如果我想使用相同的代碼編寫可能檢索不同字段或不同分組的查詢,則無法單獨使用prepare/execute方法,因爲您無法對字段(see here)使用PDO參數。
你能簡單地使用in_array()來檢查一個字段名稱,如:
// return false if the field is not recognised
if(! in_array($field_name, array('field1','field2','field3')) return false
// run the query
$q = $DB->query("SELECT * FROM table_name ORDER BY " . $field_name);
是否有一個更安全的/更快的方法?
其安全速度更快。有更好的解決方法,即當你有具有定義字段的實體/模型,但in_array是可以的;) – Daimos