【问题标题】:How can I fix "Notice: Undefined variable" in PHP? [duplicate]如何修复 PHP 中的“注意:未定义变量”? [复制]
【发布时间】:2014-04-23 07:46:37
【问题描述】:

代码:

Function ShowDataPatient($idURL)
{
    $query =" select * from cmu_list_insurance,cmu_home,cmu_patient where cmu_home.home_id = (select home_id from cmu_patient where patient_hn like '%$idURL%')
                     AND cmu_patient.patient_hn like '%$idURL%'
                     AND cmu_list_insurance.patient_id like (select patient_id from cmu_patient where patient_hn like '%$idURL%') ";

    $result = pg_query($query) or die('Query failed: ' . pg_last_error());

    while ($row = pg_fetch_array($result))
    {
        $hn = $row["patient_hn"];
        $pid = $row["patient_id"];
        $datereg = $row["patient_date_register"];
        $prefix = $row["patient_prefix"];
        $fname = $row["patient_fname"];
        $lname = $row["patient_lname"];
        $age = $row["patient_age"];
        $sex = $row["patient_sex"];
    }
    return array($hn, $pid, $datereg, $prefix, $fname, $lname, $age, $sex);
}

错误:

Notice: Undefined variable: hn in C:\xampp\htdocs\...
Notice: Undefined variable: pid in C:\xampp\htdocs\...
Notice: Undefined variable: datereg in C:\xampp\htdocs\...
Notice: Undefined variable: prefix in C:\xampp\htdocs\...
Notice: Undefined variable: fname in C:\xampp\htdocs\...
Notice: Undefined variable: lname in C:\xampp\htdocs\...
Notice: Undefined variable: age in C:\xampp\htdocs\...
Notice: Undefined variable: sex in C:\xampp\htdocs\...

我该如何解决这个问题?

【问题讨论】:

  • 你没有进入while ()块,所以当你尝试返回它们时没有设置任何变量。
  • 没有获取行,循环永远不会开始,您可能只想在找到行时返回
  • 如果您的查询没有返回任何内容,则不会有 $row 并且随后您的局部变量副本未定义。因此,请处理查询。
  • 我猜您的查询没有按预期运行,并且您正在返回未定义变量的行。
  • 看来您最多只希望返回一行,因此您可以简单地return pg_fetch_array($result) 并取消所有变量。

标签: php undefined notice


【解决方案1】:

在函数的开头定义变量,这样如果没有记录,变量就存在并且你不会得到错误。检查返回数组中的空值。

$hn = null;
$pid = null;
$datereg = null;
$prefix = null;
$fname = null;
$lname = null;
$age = null;
$sex = null;

【讨论】:

  • 完成后,有另一个查询选择在此之前填写的表单的数据,并且该数据必须显示在正确的部门标题下,因为有多个部门的人以他们的名字命名。
  • 没关系,我已经解决了问题,问题在于我声明的查询。
【解决方案2】:

在 while 循环之前声明它们。

$hn = "";
$pid = "";
$datereg = "";
$prefix = "";
$fname = "";
$lname = "";
$age = "";
$sex = "";

您收到通知是因为变量是在循环内声明和分配的。

【讨论】:

    【解决方案3】:

    我猜您的查询没有按预期运行,并且您正在返回带有未定义变量的行。

    另外,你进行变量赋值的方式,你会在每次循环迭代中覆盖同一个变量,所以你不会返回整个结果集。

    最后,返回一个数字键的结果集而不是关联键的结果集似乎很奇怪。考虑仅命名 SELECT 中所需的字段并保留键分配。所以是这样的:

    Function ShowDataPatient($idURL){
           $query =" select * from cmu_list_insurance,cmu_home,cmu_patient where cmu_home.home_id = (select home_id from cmu_patient where patient_hn like '%$idURL%')
                     AND cmu_patient.patient_hn like '%$idURL%'
                     AND cmu_list_insurance.patient_id like (select patient_id from cmu_patient where patient_hn like '%$idURL%') ";
    
       $result = pg_query($query) or die('Query failed: ' . pg_last_error());
    
       $return = array();
       while ($row = pg_fetch_array($result)){
           $return[] = $row;
       }          
    
       return $return;
    }
    

    您也可以考虑提出一个关于如何改进您的查询的问题,这是否像现在这样令人发指。

    【讨论】:

    • 是的,这更接近真实答案。
    【解决方案4】:

    您应该在 while 循环之外初始化变量。在 while 循环之外,它们目前没有作用域。您只是依靠 php 的优点让值在循环之外延续

               $hn = "";
               $pid = "";
               $datereg = "";
               $prefix = "";
               $fname = "";
               $lname = "";
               $age = "";
               $sex = "";
               while (...){}
    

    或者,您似乎只是期待单行返回。所以你可以说

    $row = pg_fetch_array($result);
    if(!row) {
        return array();
    }
    $hn = $row["patient_hn"];
    $pid = $row["patient_id"];
    $datereg = $row["patient_date_register"];
    $prefix = $row["patient_prefix"];
    $fname = $row["patient_fname"];
    $lname = $row["patient_lname"];
    $age = $row["patient_age"];
    $sex = $row["patient_sex"];
    
    return array($hn,$pid,$datereg,$prefix,$fname,$lname,$age,$sex) ;
    

    【讨论】:

      【解决方案5】:

      您似乎没有任何与您的查询匹配的记录,因此如果行数 == 0,您可能希望返回一个空数组(或 null 或其他内容)。

      【讨论】:

      • 这可能是一条评论
      • @Fabio 我回答了这个问题...?
      • 不返回数组将避开此处的通知,但可能只是将问题向上转移一个范围。
      【解决方案6】:

      XAMPP。我猜你正在使用MySQL

      mysql_fetch_array($result);
      

      并确保$result 不为空。

      【讨论】:

      • 他显然在使用 Postgres。
      • 示例代码中使用的pg_fetch_array()“PHP手册”“函数参考”“数据库扩展” → “供应商特定的数据库扩展”“PostgreSQL”“PostgreSQL 函数” .
      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2012-02-22
      相关资源
      最近更新 更多