如何使用RedBean运行LIKE%..%查询

时间:2014-03-17 09:54:54

标签: php mysql redbean

我想在Redbean运行查询。 查询是以下一个

  

" SELECT * FROM tablename WHERE name LIKE"%querystring%"要么   description LIKE"%querystring%"

我尝试了以下一个

$querystring = "querystring";
  

R :: findOne(' SELECT * FROM tablename WHERE name LIKE?OR description   喜欢?',"%$ querystring%");

但是,这不起作用,导致错误'标识符不符合RedBeanPHP安全策略'。

我尝试的另一件事是基于此:

  

R :: getAll(' SELECT * FROM table WHERE title LIKE%:title%',      [':标题' => '家']   );

这给出了RedBean错误'未定义的偏移量:0'

我试图找到一种方法来使用预处理语句来完成此操作,因此我不想将查询构造为字符串并稍后将其发送到服务器。

3 个答案:

答案 0 :(得分:4)

您需要的语法如下:

$mySearchString = "es";
$bean = R::find('bean',' name LIKE :name ',
  array(':name' => '%' . $mySearchString . '%' )
);

因此,您可以看到LIKE是在sql语句中没有通配符的情况下编写的,因为它是searchValue的一部分。你的第一次尝试就在那里,但问题是你已经在引号内写了php变量,因此它没有解决。 findOne / find也是RedBean的ORM功能,它们不能与纯SQL字符串一起使用。仔细看看文档。如果你需要纯sql尝试R:getAll就像你做的那样。与此处的那个相同的例子

$mySearchString = "es";
$bean = R::getAll('SELECT * FROM bean WHERE name LIKE :name ',
  array(':name' => '%'.$mySearchString.'%' )
);

foreach($bean as $entry) {
    echo $entry['name'] . "<br />";
}

答案 1 :(得分:0)

试试

   SELECT * FROM tablename WHERE name LIKE '%$querystring%' 
                       OR description LIKE '%$querystring%'

答案 2 :(得分:0)

可能是你可以使用:

"%".$querystring."%"