4 回答

TA貢獻1966條經(jīng)驗 獲得超4個贊
$_GET是傳遞的所有參數(shù)的數(shù)組。因此,的 URL 將導致?abc=def&foo=bar$_GET
array(2) {
["abc"]=> string(3) "def"
["foo"]=> string(3) "bar"
}
使用此功能,您可以遍歷每個項目并將其附加到查詢中:
foreach($_GET as $key => $val) {
$query .= " AND $key = '$val'";
}
但是,請確??紤] SQL 注入。在這種情況下,解決此問題的最佳選擇是使用有效密鑰列表驗證每個密鑰。

TA貢獻1796條經(jīng)驗 獲得超4個贊
您的方法不是最好的,當您有多個GET變量時,需要重新設計,但通常:
$allowed = ['serial', 'manufacturer']; //etc...
$col = key($_GET);
if(in_array($col, $allowed)) {
$val = $_GET[$col];
//Then prepare and execute using whatever DB library you are using
$st = $db->prepare("SELECT blah1, blah2, blah4, blah5 FROM datastore WHERE $col = ?");
$st->execute([$val]);
}

TA貢獻1853條經(jīng)驗 獲得超18個贊
這是以簡單明了的聲明性方式執(zhí)行此操作的一種方法。
我強烈建議檢查 PDO 和 PDO 語句來構建查詢。沒有添加此示例,因為它不是問題。
<?php
// given
$_GET = ['serial' => 342, 'something-else' => 'not used'];
$allowedVariables = ['serial', 'manufacturer', 'location', 'country'];
// filter values from the query for only allowed keys
$data = array_filter($_GET, function ($value, $key) use ($allowedVariables) {
return in_array($key, $allowedVariables);
}, ARRAY_FILTER_USE_BOTH);
// create an array of strings like "$data1 = $data2"
$query = array_map(function ($key, $value) {
return "$key = $value";
}, array_keys($data), array_values($data));
// build the query while combining values with the "AND" keyword
$query = "select * from datastore where " . implode(' and ', $query);
var_dump($query);
// string(42) "select * from datastore where serial = 342"

TA貢獻1830條經(jīng)驗 獲得超3個贊
為此,您可以使用(閱讀有關 php.netextract($inputArray))
輸入數(shù)組中的鍵將成為變量名稱,其值將分配給這些新變量。
此外,如果要篩選鍵,以便有人不會在您當前的作用域中注入不需要的變量,請在調用函數(shù)之前執(zhí)行以下操作...extract()
<?php
// Pick only the data keys that are expected. Their names must be compatible with the PHP variable naming conventions.
$filteredData = array_intersect_key($_GET /* or $_POST*/, array_flip(['serial', 'manufacturer', 'location', 'country']));
// Extract the names into variables in the current scope.
extract($filteredData);
?>
- 4 回答
- 0 關注
- 128 瀏覽
添加回答
舉報