当我需要显示每笔交易的运行余额时,我有租户门户。这是我写的查询,它完成了我需要它做的事情。
我的问题是它在Wordpress中不起作用。这是我的代码:
if (is_user_logged_in()) {
$user = wp_get_current_user();
$balance = $wpdb->query(
$wpdb->prepare(
set @csum := "SELECT current_balance FROM exp_ten WHERE tenant_number = . (int) $user->ID";
select tenant_number, transaction_amount, (@csum := @csum + transaction_amount) as narrative
from exp_tran
order by tenant_number;
)
);
下面是我得到的错误:
分析错误:语法错误,文件的/home/path中出现意外的“@”,应为“、”或“)”。php在线165
请任何人帮助更改查询以便WordPress接受。若我是对的,问题是WordPress不接受mysql变量@csum。
提前感谢您的帮助。
SO网友:Jacob Peattie
有关详细信息,请参阅文档$wpdb->prepare()
. 您需要传递字符串,但您正在键入set @csum
直接在参数中。您的代码应如下所示:
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
$balance = $wpdb->query(
$wpdb->prepare(
"SET @csum := (SELECT current_balance FROM exp_ten WHERE tenant_number=%d);
SELECT tenant_number, transaction_amount, (@csum := @csum + transaction_amount) as narrative
FROM exp_tran
ORDER BY tenant_number",
$user->ID
)
);
}
我没有任何方法来测试,因为我没有你的数据库,但这应该可以。
还要注意我是如何使用$wpdb->prepare()
传递用户ID。如果不以这种方式传递变量,那么使用prepare就没有意义。