2 回答

TA贡献2036条经验 获得超8个赞
您可以将搜索值存储在数组中。除了删除无用的 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条经验 获得超5个赞
因为$radioVal
只分配了您在代码中编写的文字值,并且从未分配任何不受信任的内容,所以对于 SQL 注入来说它是安全的。
但是,我建议您为其指定一个比""
. 因为如果 的已知值都不$searchType
匹配,则 then$radioVal
将保留""
,您将得到以下 SQL 语句:
SELECT * FROM claims WHERE = ?
这将是一个语法错误。这不会是由于 SQL 注入造成的,但它不会起作用。
顺便说一下,你不需要消毒$searchVal
。这就是使用绑定参数的要点,它是在查询准备好之后绑定的,因此它不会引入 SQL 注入。消毒与否并不重要。
- 2 回答
- 0 关注
- 113 浏览
添加回答
举报