2 回答

TA貢獻2036條經(jīng)驗 獲得超8個贊
您可以將搜索值存儲在數(shù)組中。除了刪除無用的 try-catch 之外,它還會使您的代碼不再那么臃腫。
// Get search data
$searchVal = $_POST["claim-search-bar"];
// Get radio value
$searchType = $_POST["search-param"];
// Store search type into db-naming scheme
$searchValues = [
"by-id" => "claim_id",
"by-make" => "make",
"by-model" => "model",
"by-date") => "date_received",
];
$radioVal = $searchValues[$searchType] ?? "claim_id";
// Connection to DB
require "../db-info.php";
// the connection code should really go into include
// Get Claim based off dynamic input
$getClaim = $dbh->prepare("SELECT * FROM claims WHERE $radioVal = ?");
$getClaim->execute([$searchVal]);
$claimInfo = $getClaim->fetchAll();
// Checks if DB returned any data
if($claimInfo){
// Display corresponding info
}
else{
echo "sorry no claim found";
}

TA貢獻1866條經(jīng)驗 獲得超5個贊
因為$radioVal
只分配了您在代碼中編寫的文字值,并且從未分配任何不受信任的內(nèi)容,所以對于 SQL 注入來說它是安全的。
但是,我建議您為其指定一個比""
. 因為如果 的已知值都不$searchType
匹配,則 then$radioVal
將保留""
,您將得到以下 SQL 語句:
SELECT * FROM claims WHERE = ?
這將是一個語法錯誤。這不會是由于 SQL 注入造成的,但它不會起作用。
順便說一下,你不需要消毒$searchVal
。這就是使用綁定參數(shù)的要點,它是在查詢準備好之后綁定的,因此它不會引入 SQL 注入。消毒與否并不重要。
- 2 回答
- 0 關(guān)注
- 146 瀏覽
添加回答
舉報