PHP如何修复Notice:Undefined variable:

PHP How to fix Notice: Undefined variable:

本问题已经有最佳答案,请猛点这里访问。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
}

错误:

1
2
3
4
5
6
7
8
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\...

如何解决这个问题?


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

1
2
3
4
5
6
7
8
$hn = null;
$pid = null;
$datereg = null;
$prefix = null;
$fname = null;
$lname = null;
$age = null;
$sex =null;


在while循环之前声明它们。

1
2
3
4
5
6
7
8
$hn ="";
$pid ="";
$datereg ="";
$prefix ="";
$fname ="";
$lname ="";
$age ="";
$sex ="";

您得到通知是因为变量在循环中声明和分配。


您应该在while循环之外初始化变量。在while循环之外,它们当前没有作用域。您仅仅依靠PHP的良好风度来让值在循环之外传递。

1
2
3
4
5
6
7
8
9
           $hn ="";
           $pid ="";
           $datereg ="";
           $prefix ="";
           $fname ="";
           $lname ="";
           $age ="";
           $sex ="";
           while (...){}

或者,看起来您只是希望返回一行。所以你可以说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$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) ;

我猜您的查询没有按预期运行,您将使用未定义的变量到达返回行。

另外,在执行变量分配的过程中,每次循环迭代都会覆盖同一个变量,这样就不会返回整个结果集。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}

您还可以考虑打开一个关于如何改进您的查询的问题,它是不是像现在这样非常可恶?


看起来您没有任何与查询匹配的记录,因此如果行数=0,您希望返回空数组(或空数组或其他内容)。


我猜你在使用MySQL。

确保$result不为空。