【问题标题】:Unable to add values with bindValue() to a pdo object无法使用 bindValue() 将值添加到 pdo 对象
【发布时间】:2014-01-23 05:42:15
【问题描述】:

我正在编写一个注册脚本来检查用户名是否已经存在。 首先,我无法将我的数据库实例从databaseconnection.php 转移到registration.php,这是错误:Call to undefined method DatabaseConnection::prepare()

但现在我越过了prepare() 行,想用bindValue() 将我的值提供给查询,但下一个错误是我得到'调用成员函数bindValue()一个非对象'。

这是否仍然意味着我没有得到正确的数据库实例,而是 databaseconnection.php 类的实例?

这是databaseconnection.php

    <?php
class DatabaseConnection {

    private static $instance = null;
    public $db_connection;

    private function __construct(){
        try{
            $this->db_connection = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME, DB_USER, DB_PASS);
            $this->db_connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
            return true;
        } catch (PDOException $exception){
                $this->errors[] = $this->lang['Database error'];
            return false;
        }
    }
    public static function getInstance(){
        if(self::$instance === null){
            self::$instance = new DatabaseConnection();
        }
        return self::$instance;
    }

    public function __call($method, $args) {
       $callable = array($this->pdo, $method);
       //is_callable, verify that the contents of a variable can be called as a function
       if(is_callable($callable)) {
           return call_user_func_array($callable, $args);
       }
   }
}

?>

registration.php 中,我使用此代码将实例放入我的本地私有变量中:

class Registration

{
    private $db_connection = null;


        public function __construct()
    {
        $this->db_connection = databaseConnection::getInstance();
                ...
    }
...
}

并且希望能够在registration.php 中执行此查询:

...
        $check_username_query = $this->db_connection->prepare('SELECT user_name, user_email FROM users WHERE user_name=:user_name OR user_email=:user_email');
        $check_username_query->bindValue(':user_name', $user_name, PDO::PARAM_STR);
        $check_username_query->bindValue(':user_email', $user_email, PDO::PARAM_STR);
        $check_username_query->execute();
        $results = $check_username_query->fetchAll();
...

【问题讨论】:

    标签: php mysql oop pdo bindvalue


    【解决方案1】:
    $callable = array($this->pdo, $method);
    

    您在 $this-&gt;db_connection 而不是 $this-&gt;pdo 中有 PDO 实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2020-10-17
      • 2020-11-21
      相关资源
      最近更新 更多