风行天下 发表于 2012-2-20 17:27:27

关于Undefined index问题

大家好,我发现一个问题,
$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


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

时,就不报错了,仅仅是加了一个isset的判断,请问这里区别是在哪里?为什么会上升到error层面?还请大家教教我,php初学,谢谢大家

huboo82 发表于 2012-2-20 17:52:14

Notice错误是最基本的错误,在设置为“All”的时候就会显示。isset就是判断这个数组索引是否存在。
$query->row_array();返回的是一个这样的数组,不能直接像你那么用:

array(
    array('一条数据集,包含id等字段'),
    ....
)

使用row_array()返回的数组需要foreach或者while来取得里面的每一条数据集,如果你要直接使用第一条,并且这条存在的话:
$row2 = $query->row_array();
echo $row2['id'];

CIadmin 发表于 2012-2-20 18:01:22

由于你的数组里边本来是没有以id和type为建的数据的

风行天下 发表于 2012-2-20 18:10:04

$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 static/image/common/back.gif
我print_r出$row2,它里面是有
id,type,year,month,daytime,week,hour,minute,vacancy这些关联的索引的,然 ...
<?php
$row2 = array('a'=>1);
echo $row2['a'];
?>
比如这段代码,这里的$row2也是一个数组,和查询出来的那个$row2数组是类似的,为什么测试运行的时候就正常呢?
而加了个isset(),也仅仅是判断一下,如果id是undefined,那么加不加isset()应该仍然会报错的,可是结果就正常了,
还请大家详细说说{:1_1:},谢谢大家

huboo82 发表于 2012-2-20 18:15:23

你print_r出来的贴出来看看,如果是:

array(array('id' => '123'), array('id' => '456'));

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

风行天下 发表于 2012-2-20 18:18:37

本帖最后由 风行天下 于 2012-2-20 18:20 编辑

huboo82 发表于 2012-2-20 18:15 static/image/common/back.gif
你print_r出来的贴出来看看,如果是:

这样的数组,你不能直接用索引名来访问值。 ...
我打印了一下,是这样的

Array ( => 2 => 0 => 2012 => 2 => 0 => 3 => 0 => 11 => 11 )

array(array('id' => '123'), array('id' => '456'));
这个形式的应该是result_array();函数的结果

huboo82 发表于 2012-2-20 22:14:15

呃,我迷糊了……

风行天下 发表于 2012-2-21 12:52:39

来把贴纸顶一下,来人啊{:soso_e102:}{:soso_e102:}{:soso_e102:}{:soso__11831903320155956023_1:}{:soso__7955921126269710814_2:}
页: [1]
查看完整版本: 关于Undefined index问题