Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress wp准备功能错误“;论据太少”;_Wordpress - Fatal编程技术网

Wordpress wp准备功能错误“;论据太少”;

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

在我的Wordpress插件中,我有如下代码片段:

$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的人所投的票将被记录,但不会改变公开显示的帖子分数。”