MySQL variable in query

时间:2017-08-09 作者:webhappy

当我需要显示每笔交易的运行余额时,我有租户门户。这是我写的查询,它完成了我需要它做的事情。

我的问题是它在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。

提前感谢您的帮助。

1 个回复
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就没有意义。

结束