код:
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\...
как это исправить?
Определите переменные в начале функции, поэтому, если нет записей, переменные существуют, и вы не получите ошибку. Проверьте нулевые значения в возвращаемом массиве.
$hn = null; $pid = null; $datereg = null; $prefix = null; $fname = null; $lname = null; $age = null; $sex =null;
Объявите их перед циклом while.
$hn = ""; $pid = ""; $datereg = ""; $prefix = ""; $fname = ""; $lname = ""; $age = ""; $sex = "";
Вы получаете уведомление, потому что переменные объявляются и назначаются внутри цикла.
Я бы предположил, что ваш запрос работает не так, как ожидалось, и вы попадаете на обратную линию с неопределенными переменными.
Кроме того, как вы выполняете назначение переменной, вы должны переписывать одну и ту же переменную с каждой итерацией цикла, чтобы вы не возвращали весь набор результатов.
Наконец, кажется странным возвращать набор результатов с числовым ключом вместо ассоциативно-ключевого. Попробуйте назвать только поля, необходимые в 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; }
Вы также можете рассмотреть вопрос о том, как улучшить свой запрос, это довольно отвратительно, как сейчас.
Вы должны инициализировать переменные за пределами цикла 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) ;
Похоже, что у вас нет записей, соответствующих вашему запросу, поэтому вам нужно вернуть пустой массив (или нуль или что-то еще), если число строк == 0.
xamp Я предполагаю, что вы используете mysql.
mysql_fetch_array($result);
И убедитесь, что $ result не пуст.