准备好像声明

时间:2013-08-21 12:04:48

标签: php mysql

我们有一个像

这样的声明
SELECT title, link 
  FROM search 
  WHERE title LIKE '%$keyword%'

如何使其成为预准备语句,以便正确清理用户输入,如:

  WHERE title LIKE '%?%'

上述情况似乎失败了,我甚至尝试过'%'+?+'%''%'.?.'%'

3 个答案:

答案 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中完成。