Извлечение нескольких строк из MySQL с использованием классов

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

-3
задан yivi 14 April 2019 в 09:26
поделиться

2 ответа

У вашего определения класса есть некоторые проблемы. Вы используете очень старый стиль конструктора (который был удален из PHP5, в настоящее время конструктор должен называться __construct()). Кроме того, в вашем конструкторе много чего не должно быть, но это проблема дизайна и выходит за рамки.

Я собираюсь лишь слегка коснуться проблем ООП и попытаться решить основные специфические проблемы, которые возникают у вас при получении этих строк и печати этих значений:

class DoctorService {

    private $totalPatientsA = [];
    private $totalPatientsB = [];

    private $conn;

    public function __construct($conn) {

       $this->conn = $conn;

    }

    function fetchPatients {

        $doctor_type_query  = "SELECT user_type_detail, COUNT(user_type) AS 
    'datacount' FROM users GROUP BY user_type";
        $doctor_type_result = mysqli_query( $this->conn, $doctor_type_query );

        while ( $patients = mysqli_fetch_assoc( $doctor_type_result ) ) {
            $this->totalPatientsA[] = $patients['user_type_detail'];
            $this->totalPatientsB[] = $patients['datacount'];
        }
    }

    public function getTotalPatientsA() {
       return $this->totalPatientsA;
    }


    public function getTotalPatientsB() {
       return $this->totalPatientsB;
    }
}

С этим, теперь db Соединение объявляется за пределами вашего класса доктора и становится зависимостью для него, объявленным в конструкторе.

Чтобы использовать его, вы должны сделать что-то вроде:

// I'm assuming this defines `$conn`, this is not the cleanest approach but it works for your purposes.
require_once "dbconnection.php";

$doctor_service = new DoctorService($conn);

$doctor_service->fetchPatients();

echo implode(', ', $doctor_service->getTotalPatientsA()), "\n";
echo implode(', ', $doctor_service->getTotalPatientsB()), "\n";

Сначала вам потребуется определение соединения с БД, которое вводит $conn в область видимости, и добавьте его в свой класс DoctorService.

Вы вызываете $doctor_service->fetchPatients(), чтобы фактический запрос был выполнен.

Для извлечения пациентов вы вызываете каждый из получателей, и, поскольку они возвращают массив, вы передаете результат через implode, поэтому он преобразуется в строку.

0
ответ дан yivi 14 April 2019 в 09:26
поделиться

totalPatientsA и totalPatientsB должны быть определены как массивы. Далее вы можете сделать это:

// add new value to array
$this->totalPatientsA[] = $patients['user_type_detail'];
$this->totalPatientsB[] = $patients['datacount'];
0
ответ дан u_mulder 14 April 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: