6

我有一个需要导入 .sql 文件的应用程序。我可以从命令行使用 导入文件mysql -u my_user -pMyPassword db_name < import.sql,但我想将它移到我的应用程序中。我有一些事情需要在导入之前和之后完成。现在我必须把它分成3个步骤。我找到的最接近解决方案的是获取连接(Doctrine\DBAL\Connection)并使用exec(),但即使我的源文件正确,它也会引发语法错误。我猜它试图逃避事情并双重逃避SQL。该文件是用mysqldump.

4

4 回答 4

7

使用使用 Doctrine 的 Symfony,您可以这样做:

php app/dev_console doctrine:database:import import.sql
于 2017-05-16T17:20:57.650 回答
6

您可以使用DBAL“导入”命令并执行 sql。无论如何,这比直接使用 mysql 命令的性能要低,因为它将整个文件加载到内存中

否则,我建议您使用自己的Symfony Console Command

于 2012-09-09T16:29:54.500 回答
2

就我而言,它是:

php bin/console doctrine:database:import my_sql_file.sql
于 2019-10-22T08:02:54.883 回答
0

2021 年 9 月状态:

我宁愿相信 Doctrine\Bundle\DoctrineBundle\Command\Proxy\ImportDoctrineCommand 中的代码,它在执行函数中调用弃用警告。忽略弃用警告不是好的编程习惯。由于开销,调用 dual:run-sql 效率不够高。或者,您也可以在操作系统级别调用例如mysql。这会在多用户环境中导致问题,例如因为必须在命令行上指定数据库密码。另外,服务器也必须激活这个功能;exec() 在许多环境中出于安全原因被关闭,尤其是在低成本供应商的情况下。此外,这个函数不会是数据库抽象的。这种抽象是 Doctrine 最突出的特征之一。

因此,我建议您自己读取 SQL 数据并逐行执行(参见 entityManager->createNativeSQL() 函数)。然后,您就有更好的可能性对可能的错误做出反应。

于 2021-09-21T09:57:52.350 回答