【问题标题】:How to run a LIKE %..% query using RedBean如何使用 RedBean 运行 LIKE %..% 查询
【发布时间】:2014-03-17 09:54:53
【问题描述】:

我想在 Redbean 上运行一个查询。 查询如下一个

"SELECT * FROM tablename WHERE name LIKE "%querystring%" OR 描述 LIKE "%querystring%"

我尝试了以下一个

$querystring = "querystring";

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

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

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

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

这给出了一个 RedBean 错误“未定义的偏移量:0”

我正在尝试找到一种使用准备好的语句来执行此操作的方法,因此我不想将查询构造为字符串并稍后将其发送到服务器。

【问题讨论】:

    标签: php mysql redbean


    【解决方案1】:

    您需要的语法如下:

    $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 />";
    }
    

    【讨论】:

      【解决方案2】:

      试试看

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

      【讨论】:

        【解决方案3】:

        也许你可以像这样使用:

        "%".$querystring."%"
        

        【讨论】:

        • 它说 Identifier 不符合 RedBeanPHP 安全策略。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 2012-08-11
        • 2015-08-23
        • 1970-01-01
        • 2021-04-12
        • 2011-03-19
        • 2011-03-19
        相关资源
        最近更新 更多