带参数

时间:2015-11-12 23:25:53

标签: php mysql sql doctrine-orm dql

我正在尝试使用Doctrine2在DQL中执行更新查询到mysql数据库。这是我的代码:

        $updateFiles = $entityManager
                ->createQuery("UPDATE Attachment a "
                . "SET a.filename=CONCAT(:dst, TRIM(LEADING :src FROM a.filename)) "
                . "WHERE a.owner=:ownerId AND a.filename LIKE :srcLike");
        $updateFiles->setParameter("dst", $dstFile);
        $updateFiles->setParameter("src", $srcFile);
        $updateFiles->setParameter("ownerId", $this->owner->getId());
        $updateFiles->setParameter("srcLike", $srcFile.'/%');
        $updateFiles->execute();

执行此代码时,出现以下语法错误:

[Syntax Error] line 0, col 77: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got ':src'

我尝试在没有TRIM和CONCAT的情况下执行查询,它可以正常工作。如果我用' somerandomtext'替换:src没有错误。 TRIM的语法是correct!出于某种原因,参数:src不会被替换。

这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

我在代码中查看了DQL中TRIM函数的实现,似乎我不能使用参数来表示字符' trchar'。

TRIM([LEADING | TRAILING | BOTH] [‘trchar’ FROM] str)

所以我将用查询连接字符串:

$updateFiles = $entityManager
            ->createQuery("UPDATE Attachment a "
            . "SET a.filename=CONCAT(:dst, TRIM(LEADING $srcFile FROM a.filename)) "
            . "WHERE a.owner=:ownerId AND a.filename LIKE :srcLike");