为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel DB::statement 无法为涉及列表达式的查询正确准备值

Laravel DB::statement 无法为涉及列表达式的查询正确准备值

PHP
慕容森 2021-10-15 10:13:30
我想知道 DB::statement 和 DB::unprepared 查询之间出现的问题,所以显然 DB::statement 方法不能用于对列本身执行表达式的查询,如下所示:更新标签集?= ? + 2 哪里?> ? AND user_id = ? AND tree_id = ?这将导致 SQL 为:更新标签 SET rgt = rgt + 2 WHERE rgt > 2 AND user_id = 1 AND tree_id = 1^这个查询在 mysql 解释器中使用时绝对可以正常工作,但使用 laravel 的 DB::statement 方法(顺便说一句,它可以正常工作与未准备的方法一起使用)。这种不匹配背后的原因是什么?它弹出的错误很SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax奇怪,因为它的语法正确并且已经可以在 mysql 上正常工作。所以语句方法是这样做的:    {        return $this->run($query, $bindings, function ($query, $bindings) {            if ($this->pretending()) {                return true;            }            $statement = $this->getPdo()->prepare($query);            $this->bindValues($statement, $this->prepareBindings($bindings));            $this->recordsHaveBeenModified();            return $statement->execute();        });    }而毫无准备的人:    {        return $this->run($query, [], function ($query) {            if ($this->pretending()) {                return true;            }            $this->recordsHaveBeenModified(                $change = ($this->getPdo()->exec($query) === false ? false : true)            );            return $change;        });    }我认为问题在于prepare方法。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 449 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信