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
etemail
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 😉
Vous devez vous connecter pour publier un commentaire.
Edit: (j'ai tout compris).
J'ai enfin compris pourquoi ton code ne fonctionne pas et ma réponse originale à cette question ne s'applique plus, que j'ai radié.
La raison pour laquelle votre connexion ne fonctionne pas, c'est parce que vous avez quitté le
dbpass
constante à partir du paramètre de connexion.Même si vous ne pouvez pas avoir un mot de passe défini pour elle, il est toujours nécessaire de faire partie des paramètres.
http://php.net/manual/en/ref.pdo-mysql.connection.php
Réponse originale à cette question, qui ne s'applique plus. (voir modification ci-dessus).
TBH, je n'ai pas réussi à reproduire l'erreur, au milieu d'un grand effort.
Cependant, après bricoler avec ce, ont découvert que les AOP (moins, l'un sur mon serveur), ne permettent pas de constantes être utilisé comme les 2 premiers paramètres de la DSN.
Note: Si ce que vous dites travaillé à l'école, alors il y a peut être un réglage que je ne connais pas.
En revanche, vous pouvez attribuer des variables pour les constantes, puis utiliser ces variables dans la DSN.
Pour plus d'informations sur la connexion PDO, visitez:
Ajouter rapport d'erreur vers le haut de votre fichier(s) qui vous aidera à trouver les erreurs.
Note: Erreur de déclaration doit être faite uniquement dans la mise en scène, et jamais de la production.