2.0版本数据库操作的一个bug
在CI2.0中,如果把数据库结果集,既使用$this->db->query()或$this->db->get()返回的结果,转存为xml,当数据库为mysql或mysqli的方式,xml结果正常。如果使用sqlite数据库,则结果异常。代码如下: <element><0>1</0>
<askid>1</askid>
<1>你最讨厌的食物是</1>
<asktxt>你最讨厌的食物是</asktxt>
</element>
<element>
<0>2</0>
<askid>2</askid>
<1>你最讨厌的人是</1>
<asktxt>你最讨厌的人是</asktxt>
</element>
而正常的格式应该如下:
<element>
<askid>1</askid>
<asktxt>你最讨厌的食物是</asktxt>
</element>
<element>
<askid>2</askid>
<asktxt>你最讨厌的人是</asktxt>
</element>
仔细查看了DB_Utitlity.php的代码,发现CI的xml_from_result()函数设计有误,不知道是否是笔误。以前也未用到这个功能,不知道以往版本是否也是这样。
问题出在272行“foreach ($query->result_array() as $row)”这句(我的代码稍有改动,可能与您的行数不同。)。CI可以返回result()和result_array()两种格式的结果集,一个是对象类型,一个是关联数组类型。函数已经设定“if ( ! is_object($query) OR ! method_exists($query, 'list_fields'))”的前提,但是在foreach中,使用result_array()就值得商榷了。mysql和mysqli正常,是因为mysql能自动判别输出类型,但显然,这是小型数据库sqlite所不具备的,于是就出现了上面所出现的情况。
改动方法很简单,把result_array()改成result()就正常了。
还没用到这部分功能。先收藏了。
页:
[1]