#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. @Ian Wood Я использовал ключевое слово self, и оно по-прежнему отображает пустую страницу?