我正在AWS上托管一个codeigniter应用程序,该应用程序中的一个方法正在运行
"LOAD DATA FROM S3 'S3 path' ... "
这与LOAD DATA INFILE查询基本相同,但在AWS Aurora中自定义以从S3而不是本地卷读取文件。查询按预期执行,但CI是
$this->db->error()
返回一个数组,指示发生了错误。该数组的内容是
[0, '']
首先我认为这是一个超时但是在减小大小后如果要导入的文件并确保记录被导入我开始怀疑CI的DB驱动程序不是为处理该查询的结果而设计的。查询不会真正返回任何数据,我想这会混淆CI。
有没有什么好方法可以在CI中绕过这种行为而不改变框架“sourcecode”?
提前致谢!
我意识到,因为名为MySQLi
的DB驱动程序类将以下内容返回到模型中的$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期望的查询返回结果。
所以...毕竟是一个简单的解决方案。