spt119 发表于 2011-6-7 22:10:34

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()就正常了。

avinmo 发表于 2011-8-27 14:41:52

还没用到这部分功能。先收藏了。
页: [1]
查看完整版本: 2.0版本数据库操作的一个bug