2012-12-19 62 views
5

两天前我升级到Wordpress 3.5。我不使用很多插件,GoDaddy保证我的插件工作正常。但是,我第一次在我的博客文章中收到此错误消息。警告:缺少wpdb :: prepare()的参数2,

你能帮我解决这个问题吗?

警告:缺少的参数为2 WPDB ::准备(),称为/home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.php上线91和限定在上线/home/content/52/8331652/html/wp-includes/wp-db.php 990

Here是在顶部具有在屏幕的右侧这个问题的一个页面的帖子。

感谢您提供的任何见解。

+0

打开你的/home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.php文件并粘贴到第91行,以便我们看到发生了什么。 –

+0

你能否在'themes/chateau-2.0/functions.php'中显示91行产生错误的函数? –

+0

也许你应该[Google下一次](http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/) –

回答

4

在WP-config.php文件中加入这一行:

@ini_set('display_errors', 0); 

你的主题/插件不能正常访问新的WordPress的API。它仍然有效,但会生成错误警告。检查出longer explanation

+0

如何找到php.ini文件?我读过它不是一个wordpress文件。谢谢。 –

+0

我刚刚打电话给GoDaddy,他们帮助我提供帮助笔记。谢谢。 –

8

WordPress 3.5为降低某些安全风险而进行了一些重大更改,如SQL Injectionwpdb::prepare方法被不安全地使用,因为插件开发人员正在发送完整查询而不是分隔参数。这意味着“准备好的”语句没有准备好,并且实际上是直接将参数传递给查询,这是一个安全禁止。从3.5开始,这个方法现在有三个参数。

为了对付你的眼前问题,编辑您的php.ini文件,找到行error_reporting并将其更改为以下...

error_reporting(E_ALL & ~(E_NOTICE|E_WARNING)); 

重新启动服务器。

这将防止报告所有次要脚本错误。

或者,将错误发送到日志文件。在php.ini中,找到这一行(取消注释),并将其更改为...

error_log "/path/to/php-error.log" 

这将防止被显示在您的网站上的错误。相反,他们会被写入只有你能看到的日志。

如果此错误困扰您,您可以尝试让流氓插件使用虚拟值。我们可以看到,wpdb::prepare方法有三个参数...

$wpdb->query( 
    $wpdb->prepare( 
     " 
      DELETE FROM $wpdb->postmeta 
      WHERE post_id = %d 
      AND meta_key = %s 
     ", 
     13, 'stack overflow' 
    ) 
); 

通过使受影响的插件发送null作为方法的第二个和第三个参数,将彻底解决这一问题。

1

在functions.php中查询后添加“”作为参数。

0

我也面临同样的问题。 我将这段代码添加到我的wp-config.php文件中。

@ini_set('display_errors', 0); 

然后我很高兴,没有再次发出警告信息。

0

它的发生是因为

$ wpdb->准备必须以参数执行。

你没有参数吗?

然后,一种替代方案:

位置添加到查询:

$sql = "SELECT * FROM TB_YOUR_TABLE WHERE %d AND ..."; 

法宝= 其中,%d必须是真实的

,包括真正的参数:

$results = $wpdb->get_results( 
       $wpdb->prepare($sql,1) 
      ); 

适用于mysql

希望它有帮助!