10

代码:

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

我该如何解决?

4

6 回答 6

26

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

$hn = null;
$pid = null;
$datereg = null;
$prefix = null;
$fname = null;
$lname = null;
$age = null;
$sex = null;
于 2014-03-17T21:26:20.480 回答
10

在 while 循环之前声明它们。

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

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

于 2014-03-17T21:27:05.663 回答
4

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

此外,您进行变量分配的方式,您将在每次循环迭代中覆盖相同的变量,因此您不会返回整个结果集。

最后,返回一个数字键的结果集而不是关联键的结果集似乎很奇怪。考虑仅命名 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;
}

你也可以考虑提出一个关于如何改进你的查询的问题,它现在是不是非常令人发指。

于 2014-03-17T21:27:46.573 回答
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) ;
于 2014-03-17T21:28:16.637 回答
1

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

于 2014-03-17T21:21:38.470 回答
0

XAMPP。我猜你正在使用MySQL

mysql_fetch_array($result);

并确保$result不为空。

于 2014-03-17T21:26:13.240 回答