如何在 Doctrine 数据库抽象层 (DBAL) 中输入 NULL 或字符串

问题描述 投票:0回答:1

我使用的是 Symfony 7.4.1

...
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\ParameterType;
...

    public function setImages(int $post_id, ?string $images_str): void
    {
        $this->connection->executeStatement("UPDATE `blog_posts` SET `images` = ? WHERE `id` = ?", [$images_str, $post_id], [ParameterType::STRING||ParameterType::NULL, ParameterType::INTEGER]);
    }

参数 $images_str 可以是字符串或 NULL。我必须如何指定多个 ParameterType:

ParameterType::STRING||ParameterType::NULL

是吗?

symfony doctrine-orm doctrine connection dbal
1个回答
0
投票

在 Doctrine DBAL 中,使用 ParameterType::STRING || ParameterType::NULL 对于处理 NULL 值是不正确的。相反,您应该使用条件逻辑根据 images_str 是 NULL 还是字符串来动态设置参数类型。

以下是处理此问题的方法:

public function setImages(int $post_id, ?string $images_str): void
{
    $type = $images_str === null ? ParameterType::NULL : ParameterType::STRING;
    $this->connection->executeStatement(
        "UPDATE `blog_posts` SET `images` = ? WHERE `id` = ?",
        [$images_str, $post_id],
        [$type, ParameterType::INTEGER]
    );
}

在此方法中:

如果 $images_str 为 NULL,则 $type 设置为 ParameterType::NULL;如果 $images_str 为字符串,则设置为 ParameterType::STRING。 $post_id 的正确参数类型 ParameterType::INTEGER 的指定如前所述。 这可确保查询在必要时正确绑定 NULL。

© www.soinside.com 2019 - 2024. All rights reserved.