我正在AWS上托管一个Codeigniter应用程序,并且该应用程序中的一种方法正在运行
"LOAD DATA FROM S3 'S3 path' ... "
这与LOAD DATA INFILE查询基本相同,但在AWS Aurora中进行了自定义,以从S3而非本地卷读取文件。查询按预期执行,但CI为
$this->db->error()
返回一个数组,指示发生错误。该数组的内容为
[0, '']
首先,我认为这是一个超时,但是在减小了要导入文件的大小并确保记录已导入之后,我开始怀疑CI的DB驱动程序并非旨在处理该查询的结果。 该查询实际上并没有返回任何数据,我想这会混淆CI。
在不更改框架“源代码”的情况下,有什么好的方法绕过CI中的这种行为吗?
谢谢!
答案 0 :(得分:0)
我意识到,由于名为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期望的查询没有返回结果。
所以...毕竟是一个简单的解决方案。