Php 是否有任何方法可用于数组内爆(';或';,$myArray)的wpdb prepare语句?
我正试图为$wpdb正确准备数据Php 是否有任何方法可用于数组内爆(';或';,$myArray)的wpdb prepare语句?,php,mysql,prepared-statement,wordpress,Php,Mysql,Prepared Statement,Wordpress,我正试图为$wpdb正确准备数据 $region = $wpdb->get_results( $wpdb->prepare( " SELECT tr.*, count(*) AS jobs_count FROM {$wpdb->terms} tr INNER JOIN {$wpdb->term_taxonomy} tm ON ( tm.term_id = tr.term_id ) INNER JOIN {$wpdb-&g
$region = $wpdb->get_results( $wpdb->prepare( "
SELECT tr.*, count(*) AS jobs_count FROM {$wpdb->terms} tr
INNER JOIN {$wpdb->term_taxonomy} tm
ON ( tm.term_id = tr.term_id )
INNER JOIN {$wpdb->term_relationships} tmr
ON ( tmr.term_taxonomy_id = tm.term_taxonomy_id )
INNER JOIN {$wpdb->posts} p
ON ( p.ID = tmr.object_id )
WHERE (tm.parent = '%d'
AND tm.taxonomy = '%s'
AND p.post_type = '%s' )
GROUP BY name HAVING COUNT(name) > '%d'
", 0, 'location', 'job', 0 ));
我试过这个来获取地区名称。它完全可以按预期返回数据。但在这里,地区是父分类法,国家是它的子项。因此,我还想为获得国家名单准备数据。但这里的问题是它在父元素下查找(如果存在)。所以我为它创建了一个名为$sql的动态数组。
我想准备的代码在下面以$country\u query的形式给出
在WHERE语句中,我使用php内爆方法构建动态查询。
现在对我来说很有用。但我还想准备数据,就像准备区域一样
foreach ($region as $reg) {
$sql[] = " $wpdb->term_taxonomy.parent = '$reg->term_id' ";
}
$country_query = "SELECT $wpdb->terms.*, count(*) AS jobs_count FROM $wpdb->terms
INNER JOIN $wpdb->term_taxonomy
ON ( $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id )
INNER JOIN $wpdb->term_relationships
ON ( $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id )
INNER JOIN $wpdb->posts
ON ( $wpdb->posts.ID = $wpdb->term_relationships.object_id )
WHERE (". implode(' OR ', $sql) ." AND $wpdb->term_taxonomy.taxonomy = 'location' ) AND $wpdb->posts.post_type = 'job'
GROUP BY name HAVING COUNT(name) > 0";
$country = $wpdb->get_results($country_query);
当前,我的查询在使用内爆('OR',$SQL)this后抛出此SQL语句。如果有人知道怎么做,请告诉我
SELECT wp_terms.*, count(*) AS jobs_count FROM wp_terms
INNER JOIN wp_term_taxonomy
ON ( wp_term_taxonomy.term_id = wp_terms.term_id )
INNER JOIN wp_term_relationships
ON ( wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id )
INNER JOIN wp_posts
ON ( wp_posts.ID = wp_term_relationships.object_id )
WHERE ( wp_term_taxonomy.parent = '2' OR wp_term_taxonomy.parent = '322' OR wp_term_taxonomy.parent = '651' AND wp_term_taxonomy.taxonomy = 'location' ) AND wp_posts.post_type = 'job'
GROUP BY name HAVING COUNT(name) > 0
我也在尽力寻找答案。如果我能找到任何答案,我也会分享我的答案。但问题是我不知道如何准备内爆('OR',$sql)。如果这是不可能的,而且任何人都知道,那么我必须忽略这一点,或者尝试另一种方法
提前感谢…感谢您的提醒。他对我说试试看。因此,最后我从stackoverflow中找到了一个答案:这对我帮助很大
下面给出了我的最终代码,供其他人参考
$country = array();
$sql = array();
foreach ($region as $reg) {
$sql[] = $reg->term_id;
}
$test = array("location", "job", "0");
$sql_st = "SELECT tr.*, count(*) AS jobs_count FROM {$wpdb->terms} tr
INNER JOIN {$wpdb->term_taxonomy} tm
ON ( tm.term_id = tr.term_id )
INNER JOIN {$wpdb->term_relationships} trm
ON ( trm.term_taxonomy_id = tm.term_taxonomy_id )
INNER JOIN {$wpdb->posts} p
ON ( p.ID = trm.object_id )
WHERE tm.parent IN(".implode(', ', array_fill(0, count($sql), '%s')).") AND tm.taxonomy = '%s' AND p.post_type = '%s'
GROUP BY name HAVING COUNT(name) > '%s'";
$country_query = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($sql_st), $sql, $test));
$country = $wpdb->get_results($country_query);
干杯:)我不明白。你能在中使用mysql吗?我会查一查并让你知道的,谢谢