Php 将PDO与MySqls一起使用,如%%

Php 将PDO与MySqls一起使用,如%%,php,pdo,Php,Pdo,我失败了。尽管这里有所有的答案,但我还是无法正确回答。在mysql中使用php的pdo时,如何绑定搜索词 $searchTerm = 'kfc'; $stmt = $conn->prepare("select name from table where name like CONCAT('%',:searchTerm,'%')"); $stmt->bindParam(':searchTerm', $searchTerm); or $searchTerm = 'kfc'; $st

我失败了。尽管这里有所有的答案,但我还是无法正确回答。在mysql中使用php的pdo时,如何绑定搜索词

$searchTerm = 'kfc';
$stmt = $conn->prepare("select name from table where name like CONCAT('%',:searchTerm,'%')");
$stmt->bindParam(':searchTerm', $searchTerm);

or 

$searchTerm = 'kfc';
$stmt = $conn->prepare("select name from table where name like %:searchTerm%");
$stmt->bindParam(':searchTerm', $searchTerm);

这两个都不适合我。如何正确执行此操作?

两个查询中都缺少
LIKE
子句
bindParam
将自动处理所有引用,因此您不需要在搜索词周围添加单引号

这应该起作用:

$searchTerm = 'kfc%';
$stmt = $conn->prepare("select name from table where name LIKE :searchTerm");
$stmt->bindParam(':searchTerm', $searchTerm);

虽然第二种方法毫无意义,但第一种方法似乎是正确的。你应该更努力使它发挥作用。表中可能没有与搜索词匹配的数据

在两次尝试中,您都缺少
LIKE
关键字。其他一切在第一个看起来都很好
WHERE name像CONCAT(“%”,:searchTerm“%”)
(第二个不会那样工作)对不起,这是错误的。我的代码中有一个类似的方法,但即使这样,第二个方法也无法工作。第一个很好,但我不太习惯使用concat。第一个很好。但是所有的连接让我。。。啊!我决定这样做:$searchTerm='%kfc%'。这是防止sql注入还是会出现问题?@jmenezes:
kfc%
将匹配以
kfc
开头的所有内容,
%kfc%
将匹配包含模式的所有内容
kfc
——它们是不同的。但是,这应该足够了。它将保护您免受sql注入,就像任何其他
bindParam()
一样。但是,如果输入字符串包含
%
符号,它将被视为搜索的通配符,因此您可能需要处理它。它不是可注射的,但可能会影响搜索结果。@Spudley Ok。谢谢你。