转换为PDO问题

时间:2016-07-21 04:55:29

标签: php mysqli pdo

我正在尝试将MySQLi代码转换为PDO。 class DB具有以下代码:

class DB {
    private static $instance;
    private $conn;

    private function __construct(array $dbOptions){
            $this->conn = @ new conn(   $dbOptions['db_host'],
                                    $dbOptions['db_user'],
                                    $dbOptions['db_pass'],
                                    $dbOptions['db_name'] );

        if (conn_connect_errno()) {
            throw new Exception('Database error.');
        }

        $this->conn->set_charset("utf8");
    }


    public static function init(array $dbOptions){
        if(self::$instance instanceof self){
            return false;
        }

        self::$instance = new self($dbOptions);
    }

    public static function getconnObject(){
        return self::$instance->conn;
    }

    public static function query($q){
        return self::$instance->conn->query($q);
    }

这里我只将构造函数更改为:

    private function __construct(array $dbOptions){
        $this->conn = new PDO("mysql:host={$dbOptions['db_host']};dbname={$dbOptions['db_name']};charset=utf8", $dbOptions['db_user'], $dbOptions['db_pass']);
        $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

此处我只将query($q)功能更改为:

public static function query($q, $paramArray=array()){

    $stmt = self::$instance->conn->prepare($q);
    foreach ($paramArray as $key => $value)
    {
        $stmt->bindParam($key, $value);
    }
    $stmt->execute();
    self::$instance = $stmt;
    return  $stmt;
}

到目前为止一切顺利。我现在绑定我的参数并准备sql语句。现在另一个类ChatUser具有以下代码(在我更改它之前):

    DB::query("
        INSERT INTO webchat_users (name, gravatar)
        VALUES (
            '".DB::esc($this->name)."',
            '".DB::esc($this->gravatar)."'
    )");

    return DB::getconnObject();

我改为:

    $paramArray = array(
         ":name" => $this->name,
         ":gravatar" => $this->gravatar
    );

    DB::query("
        INSERT INTO webchat_users (name, gravatar)
        VALUES (:name, :gravatar)", $paramArray);

    return DB::getconnObject();

问题/问题:我的代码在更改的代码中return DB::getconnObject();处失败。我似乎无法弄清楚原因。

我在error_log中收到以下错误:

  

PHP致命错误:在非对象上调用成员函数prepare()   在第41行的DB.class.php中PHP致命错误:调用成员函数   第31行的Chat.class.php中的非对象上的rowCount()

DB.class.php的第41行是上面代码中的行$stmt = self::$instance->conn->prepare($q);

Chat.class.php的第31行是:if($user->save()->rowCount() != 1){ 其中$user->save()获取return DB::getconnObject();

返回的值

我无法理解造成错误的原因。

原始代码来源:http://tutorialzine.com/2010/10/ajax-web-chat-php-mysql/

0 个答案:

没有答案