在我的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,但是我还没有设法将其正确地应用于上述代码。
非常感谢您的帮助!
答案 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']
));
谢谢!