Неустранимая ошибка Вызов функции-члена prepare () на null

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

Неустранимая ошибка: вызов функции-члена prepare () на null

Я использую это для включения

define("dbserver", "localhost"); define("dbuser", "user"); define("dbpass", ""); define("dbname", "user"); $db = new PDO( "mysql:host=" .dbserver. ";dbname=" .dbname,dbuser, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8" ) ); 

Здесь

 session_start(); include "DBjoin.php"; if(isset($_POST["email"])) { $_SESSION['email'] = $_POST["email"]; } if(isset($_POST["nick"])) { $_SESSION['nick'] = $_POST["nick"]; } if(isset($_POST["pass"])) { $_SESSION['pass'] = $_POST["pass"]; $_SESSION['pass'] = base64_encode($_SESSION['pass']); } $sthandler = $db->prepare("SELECT Email FROM Registrace WHERE Email = :email"); $sthandler->bindParam(':email', $_SESSION['email']); $sthandler->execute(); if(filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) { if($sthandler->rowCount() > 0){ echo "Email is used";} 

Изменить: (Я понял это).

Я, наконец, понял, почему ваш код не работает, и мой первоначальный ответ больше не применяется, который я ударил.

Причина, по которой ваше соединение не работает, заключается в том, что вы не dbpass константу dbpass из параметра соединения.

 $db = new PDO( "mysql:host=" .dbserver. ";dbname=" .dbname,dbuser,dbpass, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8" ) ); 

Оригинальный ответ, который больше не применяется. (см. править выше).

TBH, я не смог воспроизвести ошибку, среди огромных усилий.

Однако; после того, как они занялись этим, обнаружили, что PDO ( наименее, тот, что на моем сервере ), не позволит использовать константы в качестве первых двух параметров в DSN.

Sidenote: Если то, что вы сказали, работало в вашей школе, тогда может быть настройка, о которой я не знаю.

Однако вы можете назначить переменные константам, а затем использовать эти переменные в DSN.

 $servername = "localhost"; $dbname = "user"; define("dbuser", "user"); define("dbpass", ""); $dsn = "mysql:host=$servername;dbname=$dbname"; $username = dbuser; // variable equals constant $password = dbpass; // variable equals constant $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8" ); $db = new PDO($dsn, $username, $password, $options); 

Для получения дополнительной информации о подключении PDO посетите:


Добавьте отчет об ошибках в начало файла (ов), который поможет найти ошибки.

 <?php error_reporting(E_ALL); ini_set('display_errors', 1); // rest of your code 

Sidenote: Сообщение об ошибках должно выполняться только в стадии постановки и никогда не выпускаться.