Symfony5:无法使用原始 sql 插入查询绑定值

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

我必须在 Symfony 5 应用程序中使用原始 SQL 查询,以提高某些操作的性能。但我无法设法将我的参数绑定到查询,尽管它不会引发任何错误。它只是在数据库中添加新行,并将所有字段设置为 NULL。

这是我的做法:

$sql = "INSERT INTO `brand` (name, created_at) VALUES (name=:name, created_at=:date)";

        $connection = $this->em->getConnection();
        $statement = $connection->prepare($sql);
        $statement->bindValue(':name', $data);
        $statement->bindValue(':date', $now);
        $statement->executeQuery();
        
        return $connection->lastInsertId();

转储我的语句,我可以看到 sql 查询和 params 数组已建立良好。垃圾场:

Doctrine\DBAL\Statement {#939 ▼
  #sql: "INSERT INTO brand (name, created_at) VALUES (name=:name, created_at=:date)"
  #params: array:2 [▼
    ":name" => "Hyundai"
    ":date" => "2024-10-23 14:37:13"
  ]
  #types: array:2 [▶]
  #stmt: Symfony\Bridge\Doctrine\Middleware\Debug\Statement {#934 ▶}
  #platform: Doctrine\DBAL\Platforms\MySQL57Platform {#621 ▶}
  #conn: Doctrine\DBAL\Connection {#446 ▶}
}

返回“lastInsertId”向我展示了预期的结果。但在我的数据库中(我使用的是 HeidiSql,这个新行确实返回了 id,其所有字段都为 Null 值...

我尝试将这些参数作为数组直接放入execute() 调用中,得到相同的结果。我尝试使用一个简单的字符串参数来检查一个简单的工作是否有效,但没有成功。我还尝试精确指定 bindValue 调用中的参数类型(使用 \PDO::PARAM_STR,例如字符串参数)。最后,我将参数值直接放入 $sql 中,而不必在之后安全地绑定它们。我再次在数据库中发现 NULL 值。

我不知道我在这里做错了什么......

sql sql-insert bindvalue
1个回答
0
投票

问题解决了!

没有使用原始sql的习惯,我认为我愚蠢的大脑混合了SQL和DQL。

我需要改变:

"INSERT INTO brand (name, created_at) VALUES (name=:name, created_at=:date);";

进入:

"INSERT INTO brand (name, created_at) VALUES (:name, :date);"
© www.soinside.com 2019 - 2024. All rights reserved.