Erreur fatale Appel à un membre de la fonction prepare() sur la valeur null

Je suis en train de vérifier si l'email est déjà utilisé dans l'Enregistrement. Il a bien fonctionné quand je travaillais dans l'école, mais maintenant, soudain, elle affiche une erreur:

Erreur fatale: Appel à un membre de la fonction prepare() sur la valeur null

Je l'utilise pour inclure

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"
) );

Ici

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";}
  • Magasin $db dans une variable globale, essayez-le
  • pourquoi ne pas simplement par le biais de leur fonction à la place? global est souvent mal vu. De Plus, il n'est pas utilisé dans une fonction, donc aucune utilité pour elle.
  • Échec de la connexion. Recherchez les messages d'erreur
  • Ajouter $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); juste après la connexion est ouverte. De Plus, ajoutez les rapports d'erreur en haut de votre fichier(s) à droite après votre balise d'ouverture PHP par exemple <?php error_reporting(E_ALL); ini_set('display_errors', 1); puis le reste de votre code, pour voir si elle produit quelque chose. Nota: Si vos paramètres de connexion contient des espaces, qui sera un problème.
  • "Appel à un membre de la fonction prepare() sur null" - ce qui me dit que votre requête a échoué. Assurez-vous que votre formulaire HTML à l'aide d'une méthode POST et que vos entrées de tous les name attribut avec pas de fautes de frappe etc ... Inclure votre formulaire HTML dans votre question de laisser la conjecture hors de lui. Vérifiez également vos noms de table et colonne; il y a peut être une lettre, un cas en question aussi. Sur certains systèmes, Email et email ne sont pas considérés de la même manière.
  • et techniquement parlant, il vous manque une accolade de fermeture pour if(filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) { dans votre question. Alors, comment quelques-uns des commentaires maintenant?
  • pas query, mais la connexion. prepare a été appelé pour la connexion avant de requête était là 🙂
  • vous avez raison; c'est certainement leur connexion.
  • Toute idée de ce qui est mal à cela? Il a travaillé avant, donc il doit y avoir un problème mineur, je suis en manque...
  • Utilisation de base de vérification d'erreur à partir de PDO Manuel qui vous indiquera l'erreur exacte
  • peut-être parce que des constantes. essayez la méthode standard comme par le manuel de php.net/manual/en/ref.pdo-mysql.connection.php
  • J'ai compris le problème. Veuillez recharger la réponse que j'ai fournis ci-dessous, depuis qu'il a été modifié afin de refléter la raison pour laquelle il est défaillant.
  • J'ai tout compris; absence de paramètre de mot de passe. mise à jour rapide 😉 je savais que cela devait être quelque chose de "disparus".
  • Fred le deuxième rochers!
  • hehe merci Hank 😉

InformationsquelleAutor Mark | 2015-06-03