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

Chr*_* MW 5 php wordpress

我两天前升级到Wordpress 3.5.我没有使用很多插件,GoDaddy向我保证我的插件工作正常.但是,我第一次在我的博客帖子上收到此错误消息.

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

警告:缺少wpdb :: prepare()的参数2,在第91行的/home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.php中调用,并在/ home/content /中定义第990行的52/8331652/html/wp-includes/wp-db.php

是在帖子顶部屏幕右侧出现此问题的页面之一.

感谢您提供的任何见解.

Gor*_*man 9

WordPress 3.5进行了一些重大更改,以减少某些安全风险,如SQL注入.wpdb::prepare由于插件开发人员发送完整的查询而不是分离出参数,因此该方法被不安全地使用.这意味着"准备好"的语句没有准备好,实际上是直接将参数传递给查询,这是一个安全禁忌.从3.5开始,此方法现在需要三个参数.

要解决您的直接问题,请编辑您的php.ini文件,找到该行error_reporting并将其更改为以下内容...

error_reporting(E_ALL & ~(E_NOTICE|E_WARNING));
Run Code Online (Sandbox Code Playgroud)

重启服务器.

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

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

error_log "/path/to/php-error.log"
Run Code Online (Sandbox Code Playgroud)

这样可以防止错误显示在您的网站上.相反,它们将被写入只有您可以看到的日志.

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

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

通过使受影响的插件在方法中发送null第二个和第三个参数,它将完全解决问题.


Ale*_*x L 4

在 wp-config.php 中添加以下行:

@ini_set('display_errors', 0);
Run Code Online (Sandbox Code Playgroud)

您的主题/插件无法正确访问新的 WordPress API。它仍然可以工作,但会生成错误警告。查看更长的解释