[英]MySQL make query include PHP variable which contains another variable
我已經嘗試了幾件事,但是無法在我的PHP代碼中使用MySQL查詢。 請注意,當我將變量$ lastmsg硬編碼為整數時,查詢確實起作用。
該代碼在兩種情況下起作用:
$pagination
因為未設置$lastmsg
。 同樣,查詢確實起作用。 證明它在第一個實例中運行得很好,並且在對變量進行硬編碼時可以正確返回。 Firebug報告說lastmsg是通過郵寄發送的。
問題在於查詢未接收到$ lastmsg的值(我沒有返回任何值)。 我知道這是因為$ lastmsg位於$ pagination中。
PS我知道它需要注射保護...我只是想讓它起作用:
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);
有什么辦法嗎?
這不是您要查找的字符串:
$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
調用。
PHP解析器將忽略用單引號('')引起的行,就好像它們是普通字符串一樣。 您也可以通過將字符串括在雙引號(“”)中來強制PHP解析器也解析字符串。
在你的情況下$ pagination像這樣
$pagination = 'AND $wpdb->posts.ID < ".$lastmsg."';
外部引號是單引號,因此PHP和$wpdb->posts.ID
甚至$ lastmsg都將其視為簡單字符串,它們不會獲得其PHP值。
只需將您的字符串更改為
$pagination = "AND $wpdb->posts.ID < '$lastmsg'";
同樣,如果$ lastmsg是數字,則不需要內引號
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.