PHP如何修复注意事项:未定义变量:

PHP如何修复注意事项:未定义变量:,php,undefined,notice,Php,Undefined,Notice,代码: 错误: 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

代码:

错误:

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);
}

如何修复此问题?

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

Xampp
我猜您使用的是
MySQL

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\...

并确保
$result
不是空的。

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

mysql_fetch_array($result);  

在while循环之前声明它们

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

因为变量是在循环中声明和赋值的,所以您得到了通知

我猜您的查询没有按预期运行,您正在使用未定义的变量返回行

同样,在执行变量赋值的方式中,每次循环迭代都会覆盖相同的变量,因此不会返回整个结果集

最后,返回数字键控结果集而不是关联键控结果集似乎有些奇怪。考虑只在选择和保持密钥分配中需要的字段。比如说:

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

你也可以考虑打开一个关于如何改进你的查询的问题,它现在是非常可恶的。

< P>你应该在while循环之外初始化变量。在while循环之外,它们当前没有作用域。您只是依靠php的良好性能,让这些值在循环之外传递

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;
}
或者,看起来您只是希望返回一行。所以你可以说

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

您没有在
while()
块中输入变量,因此在尝试返回它们时没有设置任何变量。没有提取行,循环永远不会启动,您可能只想在找到行时返回如果查询没有返回任何内容,则将没有
$row
,并且随后您的局部变量副本将未定义。因此,处理查询。我猜您的查询没有按预期运行,您正在使用未定义的变量到达返回行。似乎您最多只希望返回一行,因此您可以简单地
返回pg\u fetch\u数组($result)
并删除所有变量。这可能是一个comment@Fabio我回答了这个问题…?不返回阵列将避开此处的通知,但很可能只是将问题的范围向上转移。他显然在使用Postgres。完成后,会有另一个查询选择在此之前填写的表单的数据,并且该数据必须显示在正确的部门标题下,因为有多个部门的人在他们的名字下面。不用管我了解决了问题问题问题在于我声明的查询。
$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) ;