我们有一个像
这样的声明SELECT title, link
FROM search
WHERE title LIKE '%$keyword%'
如何使其成为预准备语句,以便正确清理用户输入,如:
WHERE title LIKE '%?%'
上述情况似乎失败了,我甚至尝试过'%'+?+'%'
和'%'.?.'%'
。
答案 0 :(得分:2)
使用CONCAT
Mysql Docs function in your SQL:
SELECT title, link
FROM search
WHERE title LIKE CONCAT('%', ?, '%')
###################
这样它接受参数进行绑定。因此,准备好的声明。
在重复问题的答案中详细说明了解更多信息:
答案 1 :(得分:1)
它会如下所示吗?
$stmt = $dbh->prepare("select searchtitle,searchdescription,searchlink from search where
searchtitle like :title or searchdescription like :description");
$stmt->bindParam(':title', '%' . $title . '%');
$stmt->bindParam(':description', '%' . $description . '%');
$stmt->execute();
或
$stmt->bindParam(':title', "%$title%");
$stmt->bindParam(':description', "%$description%");
我修改了示例given here。
答案 2 :(得分:-1)
在Perl中,您必须将%-placeholder添加到您将使用的变量而不是?:
select searchtitle,searchdescription,searchlink from search where
searchtitle like ? or searchdescription like ?
对sql语句使用以下绑定参数:
Bindparams = ['%searchtitle%', '%searchdesc%'];
我认为这也必须在php中完成。