我正在尝试在Wordpress中使用准备好的LIKE
查询,但它似乎不起作用。我已经遵循了codex的语法。
public function userByJobId($id){
global $wpdb;
$result = $wpdb->get_row($wpdb->prepare( "SELECT * FROM use_users WHERE use_job_id LIKE = d%;", '%' . $wpdb->esc_like((int)$id)) . '%');
if(!empty($result)){
return $result;
}
return false;
}
调用方法如下:
$userid = 1
$user = new Users();
$user_id = $user->userByJobId($userid);
看不出问题出在哪里..
答案 0 :(得分:2)
已经提出了几点:
prepare()
的语法与sprintf
的语法相同;小数占位符为%d
,而非d%
LIKE
关键字不应该跟一个等号,只是要测试的表达式其他一些事情:
LIKE
的右括号之后连接%
prepare()
通配符,它应该在之前连接在一起get_row()
默认返回一个对象,而不仅仅是ID,这是返回对象的属性public function userByJobId($id){
global $wpdb;
$result = $wpdb->get_row(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}users WHERE {$wpdb->prefix}job_id LIKE %d;",
'%' . $wpdb->esc_like((int)$id) . '%'
)
);
if($result){
return $result->ID;
}
return false;
}
答案 1 :(得分:1)
可能的格式值:%s为字符串; %d为整数(整数); 和%f为浮动。
如果您想使用相似的比较准备查询,则应double escape percentages。
所以改变
$result = $wpdb->get_row($wpdb->prepare( "SELECT * FROM use_users WHERE use_job_id LIKE = d%;", '%' . $wpdb->esc_like((int)$id)) . '%');
要
$result = $wpdb->get_row($wpdb->prepare( "SELECT * FROM use_users WHERE use_job_id LIKE %%%d%%;",(int)$id));
您也不必转义值(prepare方法会为您执行此操作)。
警告:未经测试的代码