我想在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'
我试图找到一种方法来使用预处理语句来完成此操作,因此我不想将查询构造为字符串并稍后将其发送到服务器。
答案 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."%"