我们有这样的声明
SELECT title, link
FROM search
WHERE title LIKE '%$keyword%'
我怎样才能使它成为一个准备好的语句,以便正确清理用户输入,例如:
WHERE title LIKE '%?%'
以上似乎失败了,我什至尝试过'%'+?+'%'
and '%'.?.'%'
。
会不会像下面这样?
$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%");
我已经修改了这里给出的例子。
在您的 SQL 中使用Mysql Docs函数:CONCAT
SELECT title, link
FROM search
WHERE title LIKE CONCAT('%', ?, '%')
###################
这样,它接受要绑定的参数。因此,一个准备好的声明。
在重复问题的答案中的详细描述中了解更多信息:
在 Perl 中,您必须将 %-placeholder 添加到您将使用的变量中,而不是 ?:
select searchtitle,searchdescription,searchlink from search where
searchtitle like ? or searchdescription like ?
对 sql 语句使用以下绑定参数:
Bindparams = ['%searchtitle%', '%searchdesc%'];
我认为这也必须在 php 中完成。