我有一个工作声明,用于在数据库中搜索单个列:
$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 );
我想在搜索中加入另一个名为“的列”;食品名称;但我似乎不知道正确的语法。
我应该如何制定我的准备声明,以便我在搜索“;名称变体“;或“或”;食品名称;并且任一列中的匹配项都将选择该行?
最合适的回答,由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?