PHP警告:缺少wpdb :: prepare()的参数2

时间:2013-02-04 16:51:43

标签: php wordpress

大家好我收到此错误消息:

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

谢谢! 威廉

1 个答案:

答案 0 :(得分:0)

你的问题是一个设计问题。 您希望使用准备好的声明,因为您听到“这有利于安全”。但问题是你使用它们好像没有准备好声明。

当您使用预准备语句时,您希望您的程序能够像这样工作:

  1. 发送和解析不带参数值的查询
  2. 发送参数
  3. 执行查询并在需要查询时获得2,无论参数如何。
  4. 因此,您无法在查询中提供参数 ,您必须给出占位符,这些占位符在worldpress中以%开头。 然后,在您prepare方法中,您将给出值,以便它们安全地发送并安全发送。