Wordpress wp准备功能错误“;论据太少”;
在我的Wordpress插件中,我有如下代码片段:Wordpress wp准备功能错误“;论据太少”;,wordpress,Wordpress,在我的Wordpress插件中,我有如下代码片段: $total = $wpdb->get_var($wpdb->prepare( " SELECT SUM(Amount) FROM $table_name WHERE Account = $user_id AND Timestamp > {$balance['Timestamp']} ",NULL )); Fatal error: Uncaug
$total = $wpdb->get_var($wpdb->prepare(
"
SELECT SUM(Amount)
FROM $table_name
WHERE Account = $user_id AND Timestamp > {$balance['Timestamp']}
",NULL
));
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
多年来,它一直运行良好,但在我最近将Wordpress更新为5.0之后,我遇到了许多类似这样的错误:
$total = $wpdb->get_var($wpdb->prepare(
"
SELECT SUM(Amount)
FROM $table_name
WHERE Account = $user_id AND Timestamp > {$balance['Timestamp']}
",NULL
));
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
,但我不知道如何正确地将其应用于上述代码。我们使用“prepare”方法来确保我们没有发送非法操作或任何非法字符
尝试将代码修改为以下内容:
$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作为浮动。对于可能遇到类似问题的任何人:在@entreprenerds的上述注释的帮助下,我能够修复代码,如下所示:
$total = $wpdb->get_var($wpdb->prepare(
"
SELECT SUM(Amount)
FROM $table_name
WHERE Account = %d AND Timestamp > %d
",$user_id, $balance['Timestamp']
));
谢谢 谢谢你的帮助!似乎起作用的是:。。。其中Account=%d和Timestamp>%d“,$user_id,$balance['Timestamp']);因此由于某些原因,它不能作为array()和{%d}工作最后出现了问题。对此有什么解释吗?大括号是用于复杂变量表达式的。它们是由PHP解释的,而不是由SQL接口解释的。现在我们已经从SQL语句中删除了数组,我想它们不再是必需的了。如果我的答案有用的话,如果你至少对它进行了投票,那就太好了:)我做了,但它是“谢谢你的反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。”