2013-02-04 65 views
-1

大家好我收到此錯誤信息:PHP的警告:缺少參數2 :: WPDB準備()

Warning: Missing argument 2 for wpdb::prepare(), called in /home/url.com/wp-content/plugins/WPEC-Personalize-3.8/wpec-personalization.php on line 228 and 326 and defined in /home/url.com/wp-includes/wp-db.php on line 990 

我已經找到了代碼就行228和326:

$add = $wpdb->get_var($wpdb->prepare("SELECT enabled FROM ". $table_name ." WHERE pers_id = ". $myresults->pers_id." AND product_id = ".$product_id)); 

它更改爲新的WordPress(3.5查詢)標準:

$add = $wpdb->get_var($wpdb->prepare(
    "SELECT enabled FROM %s WHERE pers_id = %d AND product_id = %d", 
    $table_name, 
    $myresults->pers_id, 
    $product_id 
)); 

林不知道什麼即時通訊做錯了,但是當我一次更新下面的代碼我停止收到錯誤消息,但每次更新產品時都會複製插件創建的所有自定義字段。

見例如:https://www.americasfinestmailbox.com/products-page/birds/hummingbird-vertical/

任何幫助將不勝感激的插件作者不支持這個插件了。

我已經貼了整個代碼在這裏:http://www.pastebin.com/gxqEjee2

謝謝! 威廉

+0

你能給我們提供900行/home/url.com/wp-includes/wp-db.php – artragis

+0

我覺得這是你要找的東西:/ ** \t *轉義數據。適用於陣列。 \t * \t * WPDB使用:: _越獄() \t * WPDB使用:: _ real_escape() \t * 2.8以來。0 \t *訪問私人 \t * \t * PARAM字符串|數組$數據 \t *返回字符串|數組逃脫 \t */ \t功能_escape($數據){ \t \t如果(is_array($數據)) { \t \t \t的foreach((數組)$數據作爲$ K => $ v)的{ \t \t \t \t如果(is_array($ v))中 \t \t \t \t \t $ data [$ k] = $ this - > _ escape($ v); \t \t \t \t別的 \t \t \t \t \t $數據[$ K] = $這 - > _ real_escape($ V); \t \t \t} \t \t}否則{ \t \t \t $數據= $這 - > _ real_escape($數據); \t \t} \t \t return $ data; \t} – William

回答

0

你的問題是一個設計問題。 您想要使用準備好的語句,因爲您聽到「這對安全有益」。但問題是,您正在使用它們,好像它們沒有準備好聲明。

當您使用事先準備好的聲明,你希望你的程序是這樣工作的:

  1. 發送和解析查詢,而參數值
  2. 發送參數
  3. 執行查詢並得到了2,而你需要查詢任何參數。

所以你不能給參數查詢,你必須給它的佔位符,在worldpress,開始與%。 然後,在您prepare方法中,您將給出這些值,以便它們將被安全並安全地發送。

+0

你認爲你可以給我一個使用我的代碼的例子嗎?我只是不知道如何應用你的步驟。謝謝! – William

+0

我可以給你一段代碼,但它會是你提供的「新wordpress標準」查詢的複製/過去。 以我的信息作爲解釋這個「標準」是如何工作的,以及爲什麼你必須給出這些參數。 – artragis