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。
1 |
确保$result不为空。