Я пытаюсь проверить, была ли электронная почта уже использована в регистрации. Он работал хорошо, когда я работал над ним в школе, но теперь он внезапно обнаруживает ошибку:
Неустранимая ошибка: вызов функции-члена 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: Сообщение об ошибках должно выполняться только в стадии постановки и никогда не выпускаться.