我正在尝试将sql->prepare
与许多字符串串联使用。
在下面的代码中,我尝试调用一个函数,该函数将从get_post
返回一个$wpdb->prepare
的数组。
function test($array){
$sqlprep = "SELECT SQL_CALC_FOUND_ROWS p.ID
FROM {$wpdb->prefix}posts p
LEFT JOIN {$wpdb->prefix}postmeta m ON m.post_id = p.ID
LEFT JOIN {$wpdb->prefix}term_relationships r ON (p.ID = r.object_id)
LEFT JOIN {$wpdb->prefix}term_relationships r1 ON (p.ID = r1.object_id)
LEFT JOIN {$wpdb->prefix}term_relationships r2 ON (p.ID = r2.object_id)
LEFT JOIN {$wpdb->prefix}term_taxonomy tt ON tt.term_taxonomy_id = r.term_taxonomy_id
LEFT JOIN {$wpdb->prefix}terms t ON t.term_id = tt.term_id AND t.term_id = r.term_taxonomy_id
WHERE 1=1";
if(isset($array['post_type']) && !empty($array['post_type']){
$sqlprep .= " AND p.post_type = '".$array['post_type']."'";
}
if(isset($array['post_type']) && !empty($array['post_type']){
$sqlprep .= " AND p.post_type = '".$array['post_status']."'";
}
$sql = $wpdb->prepare($sqlprep);
$ids = $wpdb->get_col($sql);
return array_map('get_post', $ids)
}
,该值是一个数组:
$args=array(
'post_type' => 'post',
'post_status' => 'published',
);
当我尝试print_r($sql)
来获取查询时,它总是停下来直到WHERE 1=1
。
字符串连接可以用于wpdb prepare
吗?
答案 0 :(得分:0)
请注意$ wpdb对象中属性的使用和prepare方法的使用,此外,post_status的列名称存在问题:
function test($array){
$sql = "SELECT SQL_CALC_FOUND_ROWS p.ID
FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->postmeta} m ON m.post_id = p.ID
LEFT JOIN {$wpdb->term_relationships} r ON (p.ID = r.object_id)
LEFT JOIN {$wpdb->term_relationships} r1 ON (p.ID = r1.object_id)
LEFT JOIN {$wpdb->term_relationships} r2 ON (p.ID = r2.object_id)
LEFT JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id = r.term_taxonomy_id
LEFT JOIN {$wpdb->terms} t ON t.term_id = tt.term_id AND t.term_id = r.term_taxonomy_id
WHERE 1=1";
if(isset($array['post_type']) && !empty($array['post_type']){
$sql .= $wpdb->prepare(" AND p.post_type = %s", $array['post_type']);
}
if(isset($array['post_type']) && !empty($array['post_type']){
$sql .= $wpdb->prepare(" AND p.post_status = %s", $array['post_status']);
}
$ids = $wpdb->get_col($sql);
return array_map('get_post', $ids)
}