用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4763|回复: 8
收起左侧

[版本 2.x] 关于Undefined index问题

[复制链接]
发表于 2012-2-20 17:27:27 | 显示全部楼层 |阅读模式
大家好,我发现一个问题,
PHP复制代码
$sql = 'SELECT id,type,year,month,daytime,week,hour,minute,vacancy FROM way WHERE id = (SELECT route_id FROM waypointid WHERE waypoint_id = '.$row["id"].')';                                                
                                $query = $this->db->query($sql);
                               
                                $row2 = $query->row_array();
                                $data['route_id'][] = $row2['id'];
                                $data['type'][] = $row2['type'];
 
复制代码

的时候运行,就会报错
A PHP Error was encountered

Severity: Notice

Message: Undefined index: id

Filename: models/msearchcar.php


A PHP Error was encountered

Severity: Notice

Message: Undefined index: type

Filename: models/msearchcar.php


但是当我把代码改成
PHP复制代码
$row2 = $query->row_array();
                                $data['route_id'][] = isset($row2['id'])?$row2['id']:0;
                                $data['type'][] = isset($row2['type'])?$row2['type']:0;
 
复制代码

时,就不报错了,仅仅是加了一个isset的判断,请问这里区别是在哪里?为什么会上升到error层面?还请大家教教我,php初学,谢谢大家
发表于 2012-2-20 17:52:14 | 显示全部楼层
Notice错误是最基本的错误,在设置为“All”的时候就会显示。isset就是判断这个数组索引是否存在。
$query->row_array();返回的是一个这样的数组,不能直接像你那么用:
PHP复制代码
 
array(
    array('一条数据集,包含id等字段'),
    ....
)
 
复制代码

使用row_array()返回的数组需要foreach或者while来取得里面的每一条数据集,如果你要直接使用第一条,并且这条存在的话:
$row2 = $query->row_array();
echo $row2[0]['id'];
发表于 2012-2-20 18:01:22 | 显示全部楼层
由于你的数组里边本来是没有以id和type为建的数据的
 楼主| 发表于 2012-2-20 18:10:04 | 显示全部楼层
PHP复制代码
$row2 = $query->row_array();
复制代码

我print_r出$row2,它里面是有
id,type,year,month,daytime,week,hour,minute,vacancy这些关联的索引的,然后我直接用$row2['id'],
其实它是有值的,只是会报错,是因为php认为它不安全还是什么原因呢?
 楼主| 发表于 2012-2-20 18:14:21 | 显示全部楼层
本帖最后由 风行天下 于 2012-2-20 18:16 编辑
风行天下 发表于 2012-2-20 18:10
我print_r出$row2,它里面是有
id,type,year,month,daytime,week,hour,minute,vacancy这些关联的索引的,然 ...
PHP复制代码
<?php
$row2 = array('a'=>1);
echo $row2['a'];
?>
复制代码

比如这段代码,这里的$row2也是一个数组,和查询出来的那个$row2数组是类似的,为什么测试运行的时候就正常呢?
而加了个isset(),也仅仅是判断一下,如果id是undefined,那么加不加isset()应该仍然会报错的,可是结果就正常了,
还请大家详细说说,谢谢大家
发表于 2012-2-20 18:15:23 | 显示全部楼层
你print_r出来的贴出来看看,如果是:
PHP复制代码
 
array(array('id' => '123'), array('id' => '456'));
 
复制代码

这样的数组,你不能直接用索引名来访问值。
 楼主| 发表于 2012-2-20 18:18:37 | 显示全部楼层
本帖最后由 风行天下 于 2012-2-20 18:20 编辑
huboo82 发表于 2012-2-20 18:15
你print_r出来的贴出来看看,如果是:

这样的数组,你不能直接用索引名来访问值。 ...

我打印了一下,是这样的

Array ( [id] => 2 [type] => 0 [year] => 2012 [month] => 2 [daytime] => 0 [week] => 3 [hour] => 0 [minute] => 11 [vacancy] => 11 )

array(array('id' => '123'), array('id' => '456'));
这个形式的应该是result_array();函数的结果
发表于 2012-2-20 22:14:15 | 显示全部楼层
呃,我迷糊了……
 楼主| 发表于 2012-2-21 12:52:39 | 显示全部楼层
来把贴纸顶一下,来人啊{:soso_e102:}{:soso_e102:}{:soso_e102:}{:soso__11831903320155956023_1:}{:soso__7955921126269710814_2:}

本版积分规则