120

这是我的尝试:

$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');

$query->execute(array('value'));

while ($results = $query->fetch()) 
{
    echo $results['column'];
}
4

9 回答 9

136

发帖后马上想通了:

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));

while ($results = $query->fetch())
{
    echo $results['column'];
}
于 2009-02-24T20:04:19.240 回答
100

对于那些使用命名参数的人,这里是如何使用MySQL 数据库LIKE%部分匹配:

WHERE column_name LIKE CONCAT('%', :dangerousstring, '%')

其中命名参数是:dangerousstring.

换句话说,%在您自己的查询中使用明确的非转义符号,这些符号是分开的,绝对不是用户输入。

编辑:Oracle 数据库的连接语法使用连接运算符:||,所以它会简单地变成:

WHERE column_name LIKE '%' || :危险字符串 || '%'

但是,@bobince在这里提到了一些警告:

当 您想在搜索字符串中允许文字或字符而不将其用作通配符时,困难就来了。%_

因此,在组合 like 和参数化时,这是需要注意的其他事情。

于 2011-09-09T04:54:27.243 回答
20
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->bindValue(1, "%$value%", PDO::PARAM_STR);
$query->execute();

if (!$query->rowCount() == 0) 
{
    while ($results = $query->fetch()) 
    {
        echo $results['column'] . "<br />\n";
    }       
} 
else 
{
    echo 'Nothing found';
}
于 2012-09-14T16:54:02.757 回答
17

你也可以试试这个。我面临类似的问题,但经过研究得到了结果。

$query = $pdo_connection->prepare('SELECT * FROM table WHERE column LIKE :search');

$stmt= $pdo_connection->prepare($query);

$stmt->execute(array(':search' => '%'.$search_term.'%'));

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

print_r($result);
于 2015-08-05T11:10:53.000 回答
4

这有效:

search `table` where `column` like concat('%', :column, '%')
于 2017-01-30T14:59:44.513 回答
2

我从php 妄想中得到了这个

$search = "%$search%";
$stmt  = $pdo->prepare("SELECT * FROM table WHERE name LIKE ?");
$stmt->execute([$search]);
$data = $stmt->fetchAll();

它对我有用,非常简单。就像他说的那样,在将其发送到查询之前,您必须“首先准备我们的完整文字”

于 2019-07-15T13:16:24.807 回答
0

PDO 转义“%”(可能导致 sql 注入):使用前面的代码会在查找匹配部分字符串时给出期望的结果,但是如果访问者键入字符“%”,即使你不这样做,你仍然会得到结果'没有任何东西存储在数据库中(它可能导致 sql 注入)

我已经尝试了很多变体,所有结果都相同 PDO 正在转义“%”导致不需要/不兴奋的搜索结果。

我认为如果有人在它周围找到了一个词,它是值得分享的,请分享它

于 2015-09-27T00:39:12.647 回答
-1

我有类似的需求,但正在使用从表单中获取的变量。我这样做是为了使用 PHP 从我的 PostgreSQL 数据库中获取结果:

<?php
     $player = $_POST['search'];  //variable from my search form
     $find = $sqlPDO->prepare("SELECT player FROM salaries WHERE player ILIKE ?;");
     $find->execute(['%'.$player.'%']);

     while ($row = $find->fetch()) {
         echo $row['player']."</br>";
     }
?>

“ILIKE”使搜索不区分大小写,因此搜索购物车或购物车或购物车都将返回相同的结果。

于 2021-02-02T17:58:48.007 回答
-2

我可以让它工作的唯一方法是将 %$search% 放入另一个变量中。

    if(isset($_POST['submit-search'])){
         $search = $_POST['search'];
   }
    
        $query = 'SELECT * FROM posts WHERE post_title LIKE :search';
        $value ="%$search%";
        $stmt= $pdo->prepare($query);
        
        $stmt->execute(array(':search' => $value));

我不知道这是否是最好的方法,在我使用的 while 循环中:

while ($r = $stmt->fetch(PDO::FETCH_ASSOC)){
于 2022-01-17T01:26:24.663 回答