web-dev-qa-db-ja.com

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

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

それを修正する方法?

3
Beebrabie

関数の先頭で変数を定義します。レコードがない場合、変数は存在し、エラーは発生しません。返された配列のnull値を確認します。

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

Whileループの前に宣言します。

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

変数が宣言され、ループ内で割り当てられているため、通知が届きます。

6
akr

Whileループの外で変数を初期化する必要があります。 whileループの外では、それらには現在スコープがありません。あなたは値がループの外に引き継がれるようにphpの優雅さに頼っています

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

または、1行戻ることを期待しているように見えます。だからあなたはただ言うことができます

$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) ;
4
Zak

クエリが期待どおりに実行されておらず、未定義の変数を含む戻り行に到達していると思います。

また、変数の割り当てを行う方法では、ループを繰り返すたびに同じ変数を上書きするため、結果セット全体が返されることはありません。

最後に、連想キー付きの結果セットではなく、数値キー付きの結果セットを返すのは奇妙に思えます。 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;
}

クエリを改善する方法についての質問を開くことを検討することもできます。現在のところ、それはかなりひどいものです。

3
Mike Brant

クエリに一致するレコードがないように見えるため、行数== 0の場合は空の配列(またはnullなど)を返します。

1
Dr. McKay

xampp mysqlを使用していると思います。

mysql_fetch_array($result);  

また、$ resultが空でないことを確認してください。

0
Ganu