我在 AWS 上托管了一个代码点火器应用程序,该应用程序中的一个方法正在运行
"LOAD DATA FROM S3 'S3 path' ... "
这本质上与加载数据 INFILE 查询相同,但在 AWS Aurora 中进行了自定义,以从 S3 而不是本地卷读取文件。查询按预期执行,但 CI 的
$this->db->error()
返回一个数组,指示发生了错误。该数组的内容是
[0, '']
起初我以为这是一个超时,但在减小要导入的文件并确保导入记录的大小后,我开始怀疑 CI 的数据库驱动程序不是为处理该查询的结果而设计的。 查询并没有真正返回任何数据,我想这会混淆 CI。
有什么好方法可以在不更改框架"源代码"的情况下绕过 CI 中的这种行为?
提前感谢!
我意识到,由于名为MySQLi
的数据库驱动程序类将以下内容返回给模型中$this->db
实例(请参阅errno
和error
属性(
[_mysqli:protected] => mysqli Object
(
[affected_rows] => 1
[client_info] => mysqlnd 5.0.12-dev - 20150407 - $Id: b382534eeb34d9ed79345235b8bae2234b287afcs21ad4e $
[client_version] => 50012
[connect_errno] => 0
[connect_error] =>
[errno] => 0
[error] =>
[error_list] => Array
(
)
我永远不会得到有关错误的更多信息,然后mysql_errno
和mysql_error
返回给驱动程序。 因此,如果像这样错误地检查查询
if($this->db->error())
{
return false;
}
我可以简单地做到这一点
if(is_array($this->db->error()) && 0 !== $this->db->error()[0])
{
return false;
}
错误以数组格式返回,或从$this->db->error()
返回 false,因此检查错误代码是否为零非常简单。如果为零,我们可以确定查询按计划执行并且导入已完成。 我们从 $this->db->error(( 获得数组而不是 false 的原因是没有从 CI 期望的查询返回任何结果。
所以......毕竟是一个简单的解决方案。