0

我们有这样的声明

SELECT title, link 
  FROM search 
  WHERE title LIKE '%$keyword%'

我怎样才能使它成为一个准备好的语句,以便正确清理用户输入,例如:

  WHERE title LIKE '%?%'

以上似乎失败了,我什至尝试过'%'+?+'%'and '%'.?.'%'

4

3 回答 3

2

会不会像下面这样?

$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%");

我已经修改了这里给出的例子。

于 2013-08-21T12:09:00.000 回答
2

在您的 SQL 中使用Mysql Docs函数:CONCAT

SELECT title, link 
  FROM search 
  WHERE title LIKE CONCAT('%', ?, '%')
                   ###################

这样,它接受要绑定的参数。因此,一个准备好的声明。

在重复问题的答案中的详细描述中了解更多信息:

于 2013-08-21T12:12:12.110 回答
-1

在 Perl 中,您必须将 %-placeholder 添加到您将使用的变量中,而不是 ?:

select searchtitle,searchdescription,searchlink from search where
 searchtitle like ? or searchdescription like ?

对 sql 语句使用以下绑定参数:

Bindparams = ['%searchtitle%', '%searchdesc%'];

我认为这也必须在 php 中完成。

于 2013-08-21T12:08:47.390 回答