为什么我会发生致命错误:在非对象上调用成员函数prepare()?

时间:2014-08-05 11:02:40

标签: php pdo

我问过PDO错误的问题(here 但我对象的另一个问题是......

这是我的代码:

include('../../config/connexion-bdd.php');

$nom = $_POST['nom'];
$regexNom = '/^[a-zA-Z -]+$/';
$prenom = $_POST['prenom'];
$regexPrenom = '/^[a-zA-Z -]+$/';
$email = $_POST['email'];
$regexEmail = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
$identifiant = $_POST['identifiant'];
$regexIdentifiant = '/^[a-z1-9]+$/';
$motDePasse = $_POST['motDePasse'];
$confirmeMotDePasse = $_POST['ConfirmeMotDePasse'];
$regexMdp = '/^[a-zA-Z1-9]+$/';
$utilisateurConnecte = $_POST['utilisateur-connecte'];

if (preg_match($regexNom, $nom) && 
    preg_match($regexPrenom, $prenom) &&
    preg_match($regexEmail, $email) && 
    preg_match($regexIdentifiant, $identifiant) && 
    preg_match($regexMdp, $motDePasse) && 
    preg_match($regexMdp, $confirmeMotDePasse) &&
    $motDePasse == $confirmeMotDePasse)
    {
        $stmt = $bdd->prepare('SELECT COUNT(*) FROM utilisateurs WHERE identifiant = ?');
        $stmt->execute(array($_POST['identifiant']));
        if ($stmt->fetchColumn() == 0){
               $updt=$connect->prepare("INSERT INTO utilisateurs('nom','prenom','email','identifiant','mot_de_passe') VALUES (:nom, :prenom, :email, :identifiant, MD5(:mdp))");
               $updt->execute(array('nom'=>$nom,'prenom'=>$prenom,'email'=>$email,'identifiant'=>$identifiant,'mdp'=>$motDePasse));

               header('./gestion-utilisateur.php');
          } else {
              echo 'error 1';
          }
      } else {
          echo 'error 2';
      }

因此,此行$stmt = $bdd->prepare('SELECT COUNT(*) FROM utilisateurs WHERE identifiant = ?');出现此错误:

致命错误:在...中的非对象上调用成员函数prepare()

请帮助我吗?

1 个答案:

答案 0 :(得分:0)

很明显,您的$bdd不包含SQL连接。您必须检查SQL连接的有效性。

$bdd必须是一个对象,因此它包含一个名为prepare()的方法。

如果连接未正确建立,变量$bdd将不是对象,因此无法准备方法。

现在,当您使用$bdd->prepare()时,它会抛出$bdd不是对象的错误,因此它无法使用名为prepare()的方法

现在,您应该在var_dump($bdd)行之前提供一个$bdd->prepare()用于检查它。