我使用的是 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
是吗?
在 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。