5

两天前我升级到了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

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

感谢您提供的任何见解。

4

5 回答 5

9

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

要解决您当前的问题,请编辑您的 php.ini 文件,找到 for 的行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方法中发送 a 作为第二个和第三个参数,它将彻底解决问题。

于 2012-12-19T16:37:52.253 回答
4

在 wp-config.php 添加这一行:

@ini_set('display_errors', 0);

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

于 2012-12-19T15:22:43.680 回答
1

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

于 2013-01-16T06:31:06.933 回答
0

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

@ini_set('display_errors', 0);

然后我很高兴,再也没有警告信息了。

于 2013-11-28T17:00:27.427 回答
0

它发生是因为

$wpdb->prepare必须使用参数执行。

你没有参数吗?

然后,另一种选择:

添加 WHERE 进行查询:

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

魔术键 = WHERE %d必须为真

并包含一个真正的参数:

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

1对 mysql 为真

希望能帮助到你!

于 2017-07-03T06:07:04.660 回答