【发布时间】:2017-09-18 21:09:34
【问题描述】:
我在 Yii2 框架中使用控制台命令,想通过 execute() 方法导入 db 模式文件:
public function actionReset()
{
$schemasPath = Yii::getAlias('@common') . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR;
$schemaFile = $schemasPath . 'schema.sql';
try {
$command = Yii::$app->db->createCommand(file_get_contents($schemaFile));
$command->execute();
Console::output('Schema imported.');
return self::EXIT_CODE_NORMAL;
} catch (\Exception $e) {
Console::error($e->getMessage());
}
return self::EXIT_CODE_ERROR;
}
文档说:
该方法只能用于执行非查询 SQL 语句,例如 INSERT、DELETE、UPDATE SQL。不会返回任何结果集。
运行如下:
$ ./yii db/reset
不会产生错误/异常。
运行如下:
$ mysql -u{user} -p -hlocalhost -D{base} < schema.sql
生产:
第 241 行的错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在“JSON DEFAULT NULL”附近使用的正确语法 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci' 在第 4 行
因为 MariaDB 10.1 不支持 JSON 数据类型。 那么,如何检查来自 $schemaFile 的所有查询/命令是否成功?试图找到一些 Yii::$app->db->getLastError() - 没有结果。 嗯,有什么想法吗?
【问题讨论】:
-
谷歌肯定会找到什么?
-
@DoubleH 我用过,但是 execute() 不会抛出任何异常。
-
向您展示带有异常管理的代码......请
-
@scaisEdge,我没有更改/设置异常管理 - 这是框架默认值。