2010-06-16 95 views
-1

我做了以下内容:

$type = 'attachment'; 
$images = $wpdb->get_results($wpdb->prepare(' 

       SELECT p.* 
       FROM wp_%d_posts p 
       WHERE p.post_parent =%d 
       AND p.post_type = "%s" 


    ', $blog_id, $page->ID, $type),OBJECT); 


var_dump($images); 

如果我删除线“AND p.post_type =‘%s的’”然后我得到返回结果,否则我得到一个空数组返回。如果我在mysql客户端直接对数据库运行查询,我会得到结果。

没有错误,只是一个空的结果集。我在整个文件中都进行类似的查询,他们正在工作,所以我不会寻找“不这样做”的样式回复。我反对紧迫的最后期限,只需要了解为什么这不起作用,并修复它。

PHP 5.3,MYSQL 5.1。 WordPress的MU 2.9.2

谢谢!

+0

你肯定有附件是'$页面级> ID'的孩子吗? – TheDeadMedic 2010-06-16 13:11:35

+0

是的。如果我直接对数据库运行查询,我会得到结果。如前所述,如果我删除where子句的AND部分,我也会得到结果。 – codecowboy 2010-06-16 13:18:27

回答

0

不要引用"%s"。在WordPress网站上,“请注意,您不必担心引用字符串,而是将变量直接传递到SQL查询中,请使用%s占位符字符串和%d置位整数。”

例子:

$wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id));

+0

谢谢,但我试过了,它没有任何区别。我也尝试加载不同组合的引号,单引号,转义引号。没有不同。 – codecowboy 2010-06-16 13:41:00

+0

根据WordPress的手册,你发布的代码是错误的。我指出了这一点,并且你将答案标记为错误?它肯定看起来好像你没有正确处理Prepare语句... – Gary 2010-06-16 13:57:17

+0

对不起 - 如果你编辑答案,我会将它投票回来。只是有点压力:-( – codecowboy 2010-06-16 14:17:15