Класс PDO не работает, возвращает пустую страницу, когда я пытаюсь его запустить?

#php #mysql #oop #pdo

#php #mysql #ооп #pdo

Вопрос:

Я создал класс электронной почты, который будет добавлять пользователей в базу данных mysql. затем я создал два метода, первый является частным статическим, поэтому я могу получить к нему доступ в рамках второго метода, который является общедоступным статическим, при запуске этого класса отображается пустая страница? Что может быть причиной пустой страницы?

 class Email {
private static function DATABASE() {
    $dbh = new PDO("mysql:host=localhost;dbname=emails", 'bjw123nasd4441', 'hj12j2kJKj11s');
    return $dbh;
}
public static function addemail($email) {
    $sqldata = array('email' => $email);
        $stat = Email::DATABASE();
    $stat->prepare("INSERT INTO tasklist (email) VALUES (:email)");
    $stat->execute($sqldata);
    }
}

Email::addemail('foo@bar.com');
  

Я получаю эту ошибку с ошибками отображения PHP..

Вызов неопределенного метода PDO::execute()

Комментарии:

1. Вы здесь ничего не распечатывали, почему ожидаете увидеть что-то не пустое?

Ответ №1:

вы пытаетесь вызвать напрямую pdo->execute() , это не сработает. попробуйте это:

 $stat = self::DATABASE();
$query = $stat->prepare("INSERT INTO tasklist (email) VALUES (:email)");
$query->execute($sqldata);
  

и вы также должны использовать только один экземпляр pdo:

 class Email {

    private static $dbh = null;

    private static function DATABASE() {
        if(is_null(self::$dbh))
            self::$dbh = new PDO("mysql:host=localhost;dbname=emails", 'bjw123nasd4441', 'hj12j2kJKj11s');
        return self::$dbh;
    }

    //...

}
  

Ответ №2:

Я думаю, вы получаете НЕУСТРАНИМУЮ ошибку в этой строке:

 $stat = Task::DATABASE();
  

Задача не существует? Это должно быть Email::DATABASE(); .

Я предполагаю, что вы также не показываете свои ошибки, вы могли бы попытаться установить следующее в верхней части вашего скрипта:

 error_reporting(E_ALL);
ini_set('display_errors', true);
  

Это должно исправить ваш белый экран с явной ошибкой.

Примечания к сайдам

  1. Вы создаете новое подключение к базе данных для каждого электронного письма, которое хотите добавить.
  2. Я считаю, что электронное письмо класса не должно отвечать за подключение к вашей базе данных.

Комментарии:

1. Я исправил ошибку, и она по-прежнему вызывает ошибку? Верны ли методы?

2. @Ian Wood Я использовал ключевое слово self, и оно по-прежнему отображает пустую страницу?