我已经尝试了几件事,但我无法在我的php代码中获取MySQL查询。请注意,当我对变量$ lastmsg进行硬编码时,查询会正常工作。
代码在两个实例中起作用:
$pagination
,因为未设置$lastmsg
。 同样,查询工作正常。证明它在第一个实例中运行完全正常,并且在变量被硬编码时正确返回。 Firebugs报告称lastmsg是通过邮寄发送的。
问题是查询没有收到$ lastmsg的值(我没有返回值)。我知道这是因为$ lastmsg坐在$ pagination中。
P.S。我知道它需要注射保护......我只是想让它起作用:
if(isset($_POST['lastmsg']) &&is_numeric($_POST['lastmsg'])){
$lastmsg = $_POST['lastmsg'];
$pagination = 'AND $wpdb->posts.ID < ".$lastmsg."';
} else {
$pagination = '';
}
$pageposts = $wpdb->get_results($wpdb->prepare("
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()+INTERVAL 1 DAY
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN(3)
".$pagination."
ORDER BY $wpdb->posts.post_date DESC
LIMIT 10
"), OBJECT);
以下不起作用
$pagination = 'AND $wpdb->posts.ID < ';
$pageposts = $wpdb->get_results($wpdb->prepare("
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()+INTERVAL 1 DAY
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN(3)
".$pagination."
".$lastmsg."
ORDER BY $wpdb->posts.post_date DESC
LIMIT 10
"), OBJECT);
任何解决方案?
答案 0 :(得分:2)
这不是您要找的字符串:
$pagination = 'AND $wpdb->posts.ID < ".$lastmsg."';
这会在AND $wpdb->posts.ID < ".$lastmsg."
内留下文字$pagination
,当你把它交给MySQL时,该字符串不会有用。
你想在外面使用双引号(用于插值)而根本没有单引号:
$pagination = "AND $wpdb->posts.ID < $lastmsg";
或者,如果$lastmsg
是字符串而不是数字:
$pagination = "AND $wpdb->posts.ID < '$lastmsg'";
这应该让你的第一个版本正常工作。
现在开始添加所有mysql_real_escape_string
来电。
答案 1 :(得分:2)
PHP解析器将忽略引用单引号('')的行,就像它们是普通字符串一样。您可以强制PHP解析器通过将它们括在双引号(“”)中来解析字符串。
在您的情况下 $ pagination 就像这样
$pagination = 'AND $wpdb->posts.ID < ".$lastmsg."';
外引号是单引号,因此PHP和$wpdb->posts.ID
将忽略它们甚至$ lastmsg将被视为简单字符串,它们不会获得它们的PHP值。
只需将您的字符串更改为
$pagination = "AND $wpdb->posts.ID < '$lastmsg'";
如果$ lastmsg是数字,则不需要内部引号