代码:
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\...
如何解决这个问题?
答案 0 :(得分:20)
在函数开头定义变量,这样如果没有记录,变量就存在,你就不会得到错误。检查返回数组中的空值。
$hn = null;
$pid = null;
$datereg = null;
$prefix = null;
$fname = null;
$lname = null;
$age = null;
$sex =null;
答案 1 :(得分:6)
在while循环之前声明它们。
$hn = "";
$pid = "";
$datereg = "";
$prefix = "";
$fname = "";
$lname = "";
$age = "";
$sex = "";
您正在收到通知,因为变量是在循环内声明和分配的。
答案 2 :(得分: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) ;
答案 3 :(得分: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 :(得分:1)
看起来您没有任何与您的查询匹配的记录,因此如果行数== 0,您想要返回一个空数组(或null或其他内容)。
答案 5 :(得分:0)
mysql_fetch_array($result);
确保$ result不为空。