使用pdo绑定数组

3bygqnnd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(369)

这个问题在这里已经有答案了

我可以将数组绑定到in()条件吗(21个答案)
两年前关门了。
因此,我正在建立一个工作网站,用户选择几个位置,它应该返回相应的工作。这意味着我将从用户那里获得一个位置数组。如何使用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/>";

            }
huwehgph

huwehgph1#

无法将数组绑定到 IN 条款。但是,可以像这样绑定多个标量值:

where location.region in (:region1, :region2, :region3, [...])

$params = array(
    ':region1' => $regions[0],
    ':region2' => $regions[1],
    ':region3' => $regions[2]
    [...]
);

$stmt->execute($params);

你需要按程序建立 IN ($placeholders) 查询的一部分,用于处理动态数量的参数。

相关问题