【问题标题】:Wordpress php mysql LIKE query not workingWordpress php mysql LIKE 查询不起作用
【发布时间】:2011-02-27 08:45:09
【问题描述】:
$db_item =  $wpdb->get_results($wpdb->prepare( "SELECT * FROM wp_wowhead_items WHERE name LIKE %s", "%". "Hello" . "%") );

上面的这个有效...但下面的无效!

$text = "Hello";
$db_item =  $wpdb->get_results($wpdb->prepare( "SELECT * FROM wp_wowhead_items WHERE name LIKE %s", "%". $text . "%") );

我在哪里缺少语法?我尝试了几乎所有与引号、斜杠、转义符的组合......

【问题讨论】:

  • 出于好奇你可以试试"%$text%"
  • 这行得通...谢谢。问题是我之前尝试过,但它很冷,所以我认为它不起作用。似乎在其他地方它给出了“%%”,这冻结了屏幕,我无法真正看到它正在工作。

标签: php mysql wordpress


【解决方案1】:

用 double %% 转义它

在 Wordpress 中使用 get_results() 时,SQL 字符串文字中的所有 % 字符,包括 LIKE 通配符,都必须双 % 转义为 %%

$db_item = $wpdb->get_results($wpdb->prepare(

"SELECT * FROM wp_wowhead_items WHERE name LIKE '%%$text%%'"

));

【讨论】:

    【解决方案2】:

    用引号括起来:

    $db_item =  $wpdb->get_results($wpdb->prepare(
                "SELECT * FROM wp_wowhead_items WHERE name LIKE %s", "'%". $text . "%'"));
    

    【讨论】:

    • @Weptile:首先尝试在 mysql 客户端中运行您的查询,以确保它是否返回任何行。
    【解决方案3】:

    试试这个:

    $db_item =  $wpdb->get_results($wpdb->prepare(
        "SELECT * FROM wp_wowhead_items WHERE name LIKE %s", '%$text%'"
    ));
    

    【讨论】:

    • 谢谢你,“'%$text%'”不需要“”。只是'%$text%'
    • @Emmanuel,如何使用 LIKE 获取类别?
    • 它在 wordpress 5.7 版上不起作用,它总是生成像这样的随机 guid {d258ecae8e3704c8ad532e3b46f99bdc69c2c746b3fe2b2757f5be7b108912ed}my_keyword{d258ecae8e3704c8ad532e3b46f99bdc69c2c746b3fe2b2757f5be7b108912ed}
    • @JSN 我以为只有我一个人在试图找出使用 % 的疯狂输出发生了什么似乎是 5.7?这不酷。
    • @Sam,我最终使用了 remove_placeholder_escape,就像这样$db_item = $wpdb->get_results($wpdb->remove_placeholder_escape($wpdb->prepare("SELECT * FROM wp_wowhead_items WHERE name LIKE %s", '%$text%'")))
    猜你喜欢
    • 2010-10-04
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多