【问题标题】:zend db select like wildcardszend db 选择类似通配符
【发布时间】:2013-01-27 12:23:00
【问题描述】:

试图在 zend db 的选择中查找有关“like”子句的一些信息,但没有成功。 问题是不清楚如何在 LIKE 子句附近使用通配符“%”

我最初使用并在网上数百个地方推荐的坏主意是

 $db->select()
    ->where('text LIKE "%'.$query.'%"');

我猜,正确的答案应该是这样的:

 $db->select()
    ->where('text LIKE ?', $query);

但没有使用通配符

我尝试了几种解决方案,但它们似乎都不起作用:

$db->select()
    ->where('text LIKE ?', '%$query%');
$db->select()
    ->where('text LIKE ?', '%{$query}%');

谁能指出文档,或为此提供一个好的解决方案?

where() 方法的第二个参数是可选的。它是一个替换到表达式中的值。 Zend_Db_Select 引用该值并将其替换为表达式中的问号(“?”)。

说的不够

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    % 符号必须是绑定到查询的变量的一部分。如果您使用双引号而不是单引号,您的第二个示例将起作用。所以你可以这样做:

    $query = '%'.$query.'%';
    $db->select()
       ->where('text LIKE ?', $query);
    

    或:

    $db->select()
       ->where('text LIKE ?', "%$query%");
    

    【讨论】:

    • 非常感谢。这对我来说有点奇怪,但双引号有帮助。不过我不太明白。它只是 where() 方法的第二个可选参数,看起来像一个字符串。有什么区别?
    • 不同之处在于,单引号字符串中的变量不会被替换,因此'%$query%' 就是这个字面量字符串,而 PHP 解析器会解析 "%$query%" 并将 $query 的内容替换为那个变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2015-05-02
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多