$wpdb->prepare()
实际上并不完全支持sprintf()
占位符。
从Codex:
prepare的查询参数接受类似sprintf()的占位符。支持%s(字符串)、%d(整数)和%f(浮点)格式。
这并不完全清楚,但参数交换格式(例如。%1$d
) 不支持(在任何情况下,您的语法都不正确:应该是%2$s
而不是%2s
)
global $wpdb;
$wpdb->prepare(
"SELECT * FROM location
WHERE name LIKE %s OR name LIKE %s",
\'%\'.$wpdb->esc_like(\'on\'),
\'%\'.$wpdb->esc_like(\'on\').\'%\'
), ARRAY_A);
我假设“on”可能被未知值替换,否则
$wpdb->prepare()
没有必要。另一方面,SQL中的第二个条件使第一个条件过时。