php - 从 PHP 脚本执行时 MySQL 临时变量不起作用

标签 php mysql variables temporary

在 MySQL 中执行以下查询时,行会正确更新。

UPDATE market SET price = 
CASE 
WHEN 
    @order_price:=(
        @market_price:=(IF(
            market_id = 0, 
            (SELECT value FROM fiat WHERE id = 6), 
            (SELECT value FROM fiat WHERE id = 5)
        ) 
        + 
        (
            (order_percentage_dynamic/100) * @market_price
        ))
    ) < IFNULL(exchange_rate_max, 999999999) AND @market_price > IFNULL(exchange_rate_min, -999999999)
THEN @market_price 
WHEN @order_price > exchange_rate_max AND exchange_rate_max IS NOT NULL THEN exchange_rate_max
WHEN @order_price < exchange_rate_min AND exchange_rate_min IS NOT NULL THEN exchange_rate_min 
END 
WHERE bdynamicorder = true;

在 PHP 脚本中执行相同的查询会更新所有行,但值为 NULL。

if ($update_stmt = $mysqli->prepare($query)) {

    $update_stmt->execute();

}

有什么想法吗?

谢谢!

最佳答案

我很确定问题是缺少变量的初始化。考虑这个表达式:

@market_price := (IF(market_id = 0, 
                     (SELECT value FROM fiat WHERE id = 6), 
                     (SELECT value FROM fiat WHERE id = 5)
                    ) + 
                    (order_percentage_dynamic/100) * @market_price
                 )

如果@market_price尚未设置,那么这将返回NULL——当算术运算符的任一参数为NULL时,结果是NULL

一种解决方案使用额外的逻辑,例如coalesce():

@market_price := IF(market_id = 0, 
                    (SELECT value FROM fiat WHERE id = 6), 
                    (SELECT value FROM fiat WHERE id = 5)
                   ) + 
                   (order_percentage_dynamic/100) * coalesce(@market_price, 0);

或者,您可以使用 join 初始化值:

UPDATE market CROSS JOIN
       (select @market_price := 0, @order_price := 0) vars
    SET price =  . . .

我的猜测是,当您在数据库上运行此命令时,变量已被设置为非 NULL 值。

关于php - 从 PHP 脚本执行时 MySQL 临时变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185808/

相关文章:

php - 词典搜索

swift - 如何在 watchOS 上基于分页的界面中的多个界面 Controller 之间共享变量

php - JQuery 移动登录页面

mysql - 在排序语句中引用 "count"列的正确方法

mysql - 使用命令行复制 mysql 数据库

mysql - 我可以使用变量在mysql中指定OUTFILE吗

java - 重构 int、long 等

php - Symfony/Propel 和 MySQL 的问题

javascript - X-可编辑简单数据库更新不更新

php - 根据 View 更新ID