DBAL Querybuilder 未更新

Posted

技术标签:

【中文标题】DBAL Querybuilder 未更新【英文标题】:DBAL Querybuilder not updating 【发布时间】:2017-06-10 18:08:14 【问题描述】:

我正在尝试使用 DBAL 查询生成器更新记录,但它似乎不起作用。我尝试设置的data 列只有在我将此处的test 示例值替换为数字时才有效。

在这种情况下,它会完美地更新我的记录。

即使我也使用setParameter,它也会默默地失败。

$queryBuilder = $this->connection
                ->update($this->table)
                ->where('id = ?')
                ->set('data', 'test')
                ->setParameter(0, $sessionId);

我是误用了这个还是发生了其他事情?

编辑:

插入语句工作得很好:

$queryBuilder = $this->connection
                ->insert($this->table)
                ->values([
                    'id' => '?',
                    'secure' => '?',
                    'modified' => '?',
                    'lifetime' => '?',
                    'user_hash' => '?',
                    'data' => '?',
                ])
                ->setParameter(0, $sessionId)
                ->setParameter(1, 'y')
                ->setParameter(2, time())
                ->setParameter(3, $this->minutes)
                ->setParameter(4, 'test')
                ->setParameter(5, $data);
        

【问题讨论】:

列是否限制为数值? @Jolta 不,一点也不,我的插入语句工作正常,可以插入各种混合数据。 【参考方案1】:

您可以像在insert 中使用参数一样,在update 中使用参数:

$queryBuilder = $this->connection
            ->update($this->table)
            ->set('data', '?')
            ->where('id = ?')
            ->setParameter(0, 'test')
            ->setParameter(1, $sessionId);

【讨论】:

您交换了setwhere。我试过了,现在可以了,我猜这很重要。即使您正确更新了它们的对应号码,您也绝对不能交换setParameters。猜猜你是我今天的守护天使。感谢您的帮助(再次大声笑)。 我看不出它为什么不应该这样做。你是说->set('data', ':data')->setParameter('data', 'test') 不起作用吗? 你没有混合位置参数和命名参数,是吗? 删除了评论。现在想通了。感谢您的帮助。

以上是关于DBAL Querybuilder 未更新的主要内容,如果未能解决你的问题,请参考以下文章

在 Doctrine DBAL 中重用 QueryBuilder

TYPO3 DBAL Querybuilder:嵌套的 SELECT 语句?

Doctrine Dbal Table 未更改

具有数组值的 Doctrine DBAL setParameter()

Doctrine DBAL 查询生成器上缺少 insert() 方法

Doctorine/Dbal - 更新表迁移在整数上添加不需要的“自动增量”(不是增量)