如何使用LIKE语句创建PDO参数化查询?

时间:2009-02-24 20:01:59

标签: php pdo

这是我的尝试:

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

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

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

9 个答案:

答案 0 :(得分:119)

在我发布后立即弄清楚:

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

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

答案 1 :(得分:71)

要使用与%部分匹配的赞,您也可以执行此操作:column like concat('%', :dangerousstring, '%')使用命名参数:dangerousstring。换句话说,在您自己的查询中使用明确未转义的%符号,这些符号是分开的,绝对不是用户输入。

编辑:我发现的另一种连接语法是使用连接运算符:||,所以它将变得简单: where column like '%' || :dangerousstring || '%' etc

@bobince提到here

  

在   difficulty   当你想在文本中允许文字%_字符时出现   搜索字符串,不用它作为通配符。

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

答案 2 :(得分:16)

$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';
}

答案 3 :(得分:9)

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

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

答案 4 :(得分:3)

这有效:

search `table` where `column` like concat('%', :column, '%')

答案 5 :(得分:1)

我从php delusions那里得到了

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

它对我有用,非常简单。就像他说的那样,您必须先“准备完整的文字”,然后才能将其发送给查询

答案 6 :(得分:-1)

PDO转义“%”(可能导致sql注入):在寻找匹配部分字符串 BUT 时,使用前面的代码会产生所需的结果访问者键入字符“%”即使您没有存储在数据库中的任何内容(它可能导致sql注入),您仍将获得结果

我尝试了很多变种,但结果相同PDO正在逃避“%”导致不受欢迎/未激发的搜索结果。

我觉得值得分享,如果有人找到了一个字,请分享一下

答案 7 :(得分:-1)

如果您想使用php而不是在查询中使用

funs = {"parable": lambda x: x**2, "linear": lambda x: 3*x, "sine": lambda x: np.sin(x)}
def highest_fun(x):
    return max(funs, key = lambda f: funs[f](x))
print(highest_fun(1))
print(highest_fun(4))

$string = 'this is a string'; $len = strlen($string); $first = substr_replace($string, '%', 0,0); // insert % before the first character $string = substr_replace($first, '%', $len+1,0); // insert % after the last one 的值为$string

我用它制作了一个函数,并将其用于我的喜欢的语句

答案 8 :(得分:-1)

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

<?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”使搜索不区分大小写,因此搜索购物车或购物车或购物车都将返回相同的结果。