这是我的尝试:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
答案 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”使搜索不区分大小写,因此搜索购物车或购物车或购物车都将返回相同的结果。