2012-12-19 65 views
-4

我实际上开始使用PDO,我已经看到了很多关于PDO的问题,但我无法通过阅读这些问题来解决我的问题。PDO Prepare()函数致命错误:

我有一个文件PDO配置文件调用db.php,这个文件没有问题。

db.php 

<?php 
######## PDO Config File ########## 
     $mysql_hostname = "localhost"; 
     $mysql_user = "web"; 
     $mysql_password = "123123"; 
     $mysql_database = "123123"; 
     //$odb = new PDO ("mysql:host=".$mysql_hostname.";dbname=".$mysql_database;charset:UTF-8",$mysql_user,$mysql_password); 
     try{ 
       $connect = new PDO("mysql:host=".$mysql_hostname.";dbname=".$mysql_database.";charset:UTF-8", $mysql_user, $mysql_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
     } 
     catch(PDOException $pe){ 
      die('Could connect to the database because: ' .$pe->getMessage()); 
     } 
?> 

我已将此文件包含到以下PHP文件[setting.php]中。

setting.php 

class Account 
{ 
    public function userEmailChnage($inputCurrentEmail,$inputChangeEmail,$inputConfirmEmail) 
    { 
     if(!empty($inputCurrentEmail) AND !empty($inputChangeEmail) AND !empty($inputConfirmEmail)){ 
      $selectEmail  = "select mail from users where mail = ?"; 
      $selectEmailPrepare = $connect -> prepare($selectEmail); 
      $selectEmailPrepare -> execute(array($inputConfirmEmail)); 

     if ($selectEmailPrepare ->rowCoun() > 0) {  
       if($inputChangeEmail == $inputConfirmEmail) { 
         $EmailUpdate = "UPDATE users SET mail= ?"; 
         $EmailUpdatePrepare = $connect->prepare($EmailUpdate); 
         $EmailUpdatePrepare -> execute(array($inputChangeEmail)); 
         $msg[EmailUpdateOpration]=Success; 

       }else{ 
         $msg[IsConfirmMailMatching]=FALSE; //---------------- > JSON ERROR Msg 
       } 
      }else{ 
        $msg[IsEmailInDatabase]=FALSE; //---------------- > JSON ERROR Msg 
      } 
     }else{ 
      $msg[IsEmailFieldEmpty]=TRUE; //---------------- > JSON ERROR Msg 
     } 
     header("Content-Type: application/json", true); 
     echo json_encode($msg); 
    } 

} 

我面临着以下错误的文件执行后:

Fatal error: Call to a member function prepare() on a non-object in /home/admin/public_html/class/setting.php on line 12 

我试图改变PDO的配置文件,它并没有奏效。我开始测试setting.php ..无法解决它!

+0

'$ connect'必须是'PDO'对象,然后才能在'userEmailChnage()'函数中使用它。 nitpick ..请将'userEmailChnage'改正为'userEmailChange',以避免混淆拼写。 – tradyblix

+0

[在独立函数中访问另一个类的方法]可能的重复(http://stackoverflow.com/questions/13932191/accessing-another-class-method-from-within-a-standalone-function) – deceze

+0

我有将该文件包含到setting.php中,因此它是对象! –

回答

2

在这一行:

$EmailUpdatePrepare = $connect->prepare($EmailUpdate); 

...你得到这个错误:

Call to a member function prepare() on a non-object

这意味着正是:$connect的对象。它似乎是一个全局变量,因此您需要像这样处理它:在使用它之前请致电global $connect;或通过$GLOBALS['connect']读取它。 (或者,甚至更好,将它作为参数传递给方法。)

0

看来$connect不是PDO的对象。这可能是一些NULL或错误的值。 可能你的连接失败了。尝试检查抛出PDOException:

try { 
    // pdo connection 
} catch (PDOException $e) { 
    exit($e->getMessage()); 
} 

公告称,PDO::__construct()只在成功返回一个对象,并以其他方式thows异常。

0

您应该在userEmailChnage()方法中包含/需要db.php。

+0

宁愿传递对Account类成员变量的引用,并在类中使用此引用。 –

+0

我已经收录了! –

相关问题