【发布时间】:2018-04-29 10:41:26
【问题描述】:
所以我正在建立一个用户选择几个位置的工作网站,它应该返回相应的工作。这意味着我将从用户那里获得一系列位置。我将如何使用 PDO 来绑定这个数组。目前我只是直接将值添加到 SQL 中,但我知道这是一个安全问题。我该如何重写它,使其使用如下语法:
$stmt->bindValue(":locations", $locations);
据我所知:
$location = $_POST['location'];
$locs = "'" . implode("', '", $location) . "'";
//create query
$sql =
"SELECT *
FROM job
JOIN location ON job.location_id = location.id
WHERE location.region IN ($locs)
";
//get results
try
{
$stmt = $DB->prepare($sql);
$stmt->execute();
$results = $stmt->fetchAll();
}
catch (Exception $ex)
{
echo $ex->getMessage();
}
//print results
foreach($results as $res)
{
echo "<p>Title:" . $res['title'];
echo "<p>Views:" . $res['views'];
echo "<p>Created At:" . $res['created_at'];
echo "<p>Image:" . $res['img_url'];
echo "<p>Salary:" . $res['salary'];
echo "<p>Region:" . $res['region'];
echo "<p>State:" . $res['state'];
echo "<br/><br/>";
}
【问题讨论】:
-
我认为您不能使用 PDO 绑定 IN 子句。您可能需要在 PHP 中验证格式以防止注入,然后将其直接放入查询中,就像您已经在做的那样。