PDO Prepare()函数致命错误:

时间:2012-12-19 09:17:59

标签: php mysql pdo

我实际上开始使用PDO,我在PDO上看到了很多问题,但我无法通过阅读这些问题来解决我的问题。

我有一个名为db.php的文件PDO配置文件,此文件没有问题。

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 ..无法解决它!

3 个答案:

答案 0 :(得分:2)

在这一行:

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

...你收到这个错误:

  

在非对象上调用成员函数prepare()

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

答案 1 :(得分:0)

$connect似乎不是PDO的对象。它可能是一些NULL或false值。 可能你的连接无声地失败了。尝试检查抛出的PDOException:

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

注意PDO::__construct()仅在成功时返回一个对象,否则会产生异常。

答案 2 :(得分:0)

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