设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 进阶讨论
›
2.0版本数据库操作的一个bug
返回列表
查看:
3356
|
回复:
1
[数据库]
2.0版本数据库操作的一个bug
[复制链接]
spt119
spt119
当前离线
积分
866
IP卡
狗仔卡
发表于 2011-6-7 22:10:34
|
显示全部楼层
|
阅读模式
在CI2.0中,如果把数据库结果集,既使用$this->db->query()或$this->db->get()返回的结果,转存为xml,当数据库为mysql或mysqli的方式,xml结果正常。如果使用sqlite数据库,则结果异常。代码如下:
XML
复制代码
<element
>
<0
>
1
</0
>
<askid
>
1
</askid
>
<1
>
你最讨厌的食物是
</1
>
<asktxt
>
你最讨厌的食物是
</asktxt
>
</element
>
<element
>
<0
>
2
</0
>
<askid
>
2
</askid
>
<1
>
你最讨厌的人是
</1
>
<asktxt
>
你最讨厌的人是
</asktxt
>
</element
>
复制代码
而正常的格式应该如下:
XML
复制代码
<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
威望
+5
收起
理由
Hex
+ 5
赞一个!
查看全部评分
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
avinmo
avinmo
当前离线
积分
393
IP卡
狗仔卡
发表于 2011-8-27 14:41:52
|
显示全部楼层
还没用到这部分功能。先收藏了。
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页