php - Mysql 更新查询运行两次

标签 php mysql codeigniter pdo

下面的查询在mysql终端、工作台和php中以不同的方式执行。 mysql 终端和工作台给出相同的结果,但 php 给出不同的结果(看起来查询执行了 2 次)。 我想减少 1 件商品的数量。但在 php(codeigniter ,pdo connection) 中,它从数量中减去 2 个项目(总是我提到的两倍)。 注意:我很确定我不会执行此查询两次(在循环中)。

UPDATE tbl_stock tsk,
    (SELECT 
        tsk.id_stock, tsk.qty
    FROM
        tbl_store ts
    inner join tbl_stock tsk ON ts.id_store = tsk.id_store
    where
        ts.id_physical_place = 2
            and ts.store_status = 1
            and tsk.stock_status = 1
            and tsk.id_products = 796
    limit 1) tmp 
SET 
    tsk.qty = (if(tmp.qty >= 1,
        (tmp.qty - 1),
        ifnull(tmp.qty, 0)))
WHERE
    tsk.id_stock = tmp.id_stock

提前致谢!

更新:

从终端 ->

查询正常,1 行受影响,2 条警告(0.03 秒) 匹配的行:1 更改:1 警告:0

注意(代码 1592):由于 BINLOG_FORMAT = STATEMENT,使用语句格式写入二进制日志的语句不安全。该语句不安全,因为它使用了 LIMIT 子句。这是不安全的,因为无法预测所包含的行集。 注意(代码 1592):由于 BINLOG_FORMAT = STATEMENT,使用语句格式写入二进制日志的语句不安全。从另一个表中进行选择后写入具有自动增量列的表的语句是不安全的,因为检索行的顺序决定了将写入哪些行(如果有)。该顺序无法预测,并且在主设备和从设备上可能有所不同。

http://codetidy.com/8338/

最佳答案

没有想法。 但请尝试按照您在上面的网址中提到的那样单独执行它们

        $mod_select = $this->db->mod_select("SELECT
       tsk.id_stock, tsk.qty
   FROM
       tbl_store ts
   inner join tbl_stock tsk ON ts.id_store = tsk.id_store
   where
       ts.id_physical_place = " . $all_userdata['id_physical_place'] . "
           and ts.store_status = 1
           and tsk.stock_status = 1
           and tsk.id_products = " . $value['itm'] . " limit 1");
        if ($mod_select[0]->qty >= $value['qty']) {
            $this->db->update('tbl_stock', array('qty' => $mod_select[0]->qty - $value['qty']), array('id_stock' => $mod_select[0]->id_stock));
        }

希望这有帮助。

关于php - Mysql 更新查询运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22251071/

相关文章:

php - 具有特殊字符的名称的正则表达式 (Unicode)

php - Mysql查询逗号分隔符

php - 正确连接 2 个表

php - 模仿 CodeIgniter 中退出的使用的类似方法

javascript - 在 PHP 中附加字符串的问题

codeigniter 最佳实践 - 多个模型

php - Laravel mysql 联合多个表

javascript - 从 JSON 文件填充表内容

python - SQLAlchemy StaleDataError 删除通过 ORM sqlalchemy.orm.exc.StaleDataError 插入的项目

c# - 使用 C# 同步 Mysql 数据库的最佳方法