未定义的变量问题在不同的PHP版本之间?

时间:2011-04-15 11:55:53

标签: php codeigniter undefined

我正在使用XAMPP 1.7.2(PHP 5.3)来扩展winxp localhost。 有一个功能很好。来自CodeIgniter模块。

function get_cal_eventTitle($year, $month){
        $this->db->where('eventYear =', $year);
        $this->db->where('eventMonth =', $month);
        $this->db->select('eventTitle');
            $query = $this->db->get('tb_event_calendar');

        $result = $query->result(); 

        foreach ($result as $row)
        {
            $withEmptyTitle = $row->eventTitle;         
            //echo $withEmptyTitle.'<br>';
            $noEmptyTitle = str_replace(" ","%20",$withEmptyTitle);
            $withUrlTitle = '<a href='.base_url().'index.php/calendar/singleEvent/'.$year.'/'.$month.'/'.$noEmptyTitle.'/'.'>'.$withEmptyTitle.'</a>';         
            //echo $withUrlTitle.'<br>';
            $row->eventTitle = $withUrlTitle;          
        }
        return $result;
    }

当我将代码上传到远程服务器(PHP 5.2.9)时。它显示错误,

withEmptyTitle undefined variable

A PHP Error was encountered
Severity: Notice

Message: Undefined variable: withUrlTitle

Filename: models/calendar_model.php

Line Number: 54 // $withEmptyTitle = $row->eventTitle;  

但是当我为行echo $withEmptyTitle.'<br>';启用评论时。它在远程服务器上运行良好。

假设withEmptyTitle回显 4月运行事件

我不知道为什么?你能给我一些解决这个问题的建议吗?感谢您的投入。

1 个答案:

答案 0 :(得分:1)

您所看到的可能不是错误,而是警告

PHP可能会抛出警告,因为您正在使用尚未初始化的变量。听起来您的本地开发PHP安装可能会出现警告消息,而您的实时服务器已启用它们。 (事实上​​,最佳做法是反过来!)

在这种情况下,如果$withEmptyTitle = $row->eventTitle;属性返回为未设置,$withEmptyTitle可能没有初始化eventTitle变量。然后,当您尝试在str_replace()调用中使用该变量时,它会跟随行并抛出警告。

您可以通过以下方式避免此警告:

  • 在PHP.ini中关闭警告消息
  • 在程序中执行ini_set()以关闭它。
  • 使用isset($withEmptyTitle)检查变量是否在实际使用之前设置。
  • 确保$row确实包含eventTitle属性(在程序的上下文中,如果缺少,可能意味着数据不正确或数据库表设置不正确?无论如何,您可以更改要使用IFNULL()的SQL查询,或至少确保明确查询该字段。

[编辑]

我看到你编辑了这个问题。特别是,我注意到以下几点:

Line Number: 54 // $withEmptyTitle = $row->eventTitle;  

我注意到// ....这是否意味着这条线被注释掉了?你有没有在服务器上得到一个副本评论?这肯定会解释你收到警告的事实!