2012-12-17 58 views
0

在Wordpress 3.5之前,我有一個完美的wpdb prepare語句。這是我的線:

$post_id = $wpdb->get_var($wpdb->prepare("SELECT a.post_id 
     FROM $metatable AS a 
     JOIN $metatable AS b ON a.post_id = b.post_id 
     WHERE a.meta_value = '$valuex1' AND b.meta_value = '$valuex2'")); 

現在與Wordpress 3.5,這將返回一個警告,因爲這沒有完全消毒。我修改了這個使用佔位符的建議由WordPress的:

$post_id = $wpdb->get_var($wpdb->prepare("SELECT a.post_id FROM $metatable AS a JOIN $metatable AS b ON a.post_id = b.post_id WHERE a.meta_value =%d AND b.meta_value =%s",$valuex1,$valuex2)); 

但是,它不再從數據庫檢索正確的信息。我的修改後的查詢有問題嗎?如何改變它,以便它會再次工作?

感謝您的幫助。

回答

4

我的不好,這很簡單! Wordpress使用兩個佔位符%s和%d。

%d應該用於整數:

%S應該通過串

而數據庫時使用。

我上面的問題是,我把它們混合起來,我使用%d作爲字符串或%s作爲整數。因此,通過針對您的特定數據類型使用正確的佔位符來解決問題。問題解決了。

例如,如果您使用id與php變量$ id查詢數據庫,佔位符應該是%d,因爲它是整數,否則爲字符串,例如名稱等使用%s。

相關問題