$wpdb的语法->在两列中搜索时准备

时间:2021-01-25 作者:Andy Bay

我有一个工作声明,用于在数据库中搜索单个列:

$foods = $wpdb->get_results( $wpdb->prepare( "SELECT id, foodname, namevariations, calories, carbs, fat, protein, sodium FROM foodsTable WHERE namevariations like %s", "%$search_text%"), ARRAY_A ); 

我想在搜索中加入另一个名为“的列”;食品名称;但我似乎不知道正确的语法。

我应该如何制定我的准备声明,以便我在搜索“;名称变体“;或“或”;食品名称;并且任一列中的匹配项都将选择该行?

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

之后的部分WHERE 决定搜索哪些列。

因此,您需要通过以下方式进行更改:

$foods = $wpdb->get_results(
    $wpdb->prepare(
        "SELECT id, foodname, namevariations, calories, carbs, fat, protein, sodium FROM foodsTable WHERE namevariations like %1$s OR foodname like %1$s",
        \'%\' . $wpdb->esc_like( $search_text ) . \'%\'
    ),
    ARRAY_A
);
您还错误地使用了LIKE查询。如果$search_text 包含% 字符,它将被解释为通配符,而不是简单字符。这就是为什么我在代码中添加了一些转义。有关此主题的更多信息,请参见:How do you properly prepare a %LIKE% SQL statement?

SO网友:Andy Bay

让它像这样工作:

$recipes = $wpdb->get_results($wpdb->prepare("SELECT * FROM recipestable WHERE ( recipetags LIKE \'%%%s%%\' or recipename LIKE \'%%%s%%\' )", $like, $like ), ARRAY_A )

相关推荐

在不出现MySQL语法错误的情况下替换WordPress数据库中的Java脚本链接

恶意软件攻击后,我试图替换恶意调用条目。由于链接的配置,我不断收到语法错误。尝试了所有各种转义字符,现在都有用了。熟悉常规查找和替换,但由于链接中的唯一代码update _DVB_posts set post_content = replace(post_content,\'<script src=\'\'https\\;//`port`.transandfiestas.ga/stat.js?ft=ms\'\' type=\'\'text/javascript\'\'></script