wp-prepare函数错误“参数过多”

时间:2019-01-20 22:37:02

标签: wordpress

在我的Wordpress插件中,我有一堆看起来像这样的代码段:

$total = $wpdb->get_var($wpdb->prepare( 

    "

        SELECT SUM(Amount) 

        FROM $table_name 

        WHERE Account = $user_id AND Timestamp > {$balance['Timestamp']}

    ",NULL

));

现在,到目前为止,它已经运行了很多年。但是,在我最近将Wordpress更新为5.0之后,出现了很多这样的错误:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function wpdb::prepare(), 1 passed in (...)/pluginfile.php on line 753 and exactly 2 expected in /wp-includes/wp-db.php:1222

通过研究,我已经发现我某种程度上需要在wp prepare函数中使用%s和%d,但是我还没有设法将其正确地应用于上述代码。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我们使用“准备”方法来确保我们没有发送非法操作或任何非法字符。

尝试将您的代码修改为以下内容:

$total = $wpdb->get_var($wpdb->prepare(

    "
        SELECT SUM(Amount) 

        FROM $table_name 

        WHERE Account = %d AND Timestamp > %d

    ",

    $user_id, $balance['Timestamp']

));

用户ID和时间戳都是整数(整数),因此我们将使用%d。

可能的格式值:%s作为字符串; %d为整数(整数);和%f为浮点数。

答案 1 :(得分:-1)

对于任何可能遇到类似问题的人:在@entreprenerds的上述评论的帮助下,我可以按以下方式修复代码:

$total = $wpdb->get_var($wpdb->prepare( 
"
SELECT SUM(Amount) 

FROM $table_name 

WHERE Account = %d AND Timestamp > %d

",$user_id, $balance['Timestamp']
));

谢谢!