php - 无法使用 bindValue() 将值添加到 pdo 对象

标签 php mysql oop pdo bindvalue

我正在编写一个注册脚本来检查用户名是否已存在。 首先,我在将数据库实例从 databaseconnection.phpregistration.php 时遇到了麻烦,这是错误:调用未定义的方法 DatabaseConnection::prepare().

但是现在我已经过了 prepare() 行,并希望使用 bindValue() 将我的值提供给查询,但下一个错误是我想要的get '调用非对象上的成员函数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 中,我使用此代码将实例获取到我的本地私有(private)变量中:

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();
...

最佳答案

$callable = array($this->pdo, $method);

您在 $this->db_connection 中有 PDO 实例,而不是 $this->pdo

关于php - 无法使用 bindValue() 将值添加到 pdo 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939476/

相关文章:

c# - 在 c# 中解压由 php 的 gzcompress() 压缩的字符串

javascript - 带有 href 的 Sweet Alert 删除确认

php - 无法诊断我的 MySQL root 用户问题

php - 方法语法 "public function direct(){}"在 PHP 中如何工作?

c# - 当子类不使用抽象类中的函数时,是否有使用 NotImplementedException 的替代方法?

python - 寻求目录树数据表示的优雅设计

如果字符串太长,PHP 不接收 POST

php - CodeIgniter PHP MySQL 查询查看

php - 用PHP搜索查询

mysql - 在mysql中管理行过期的最佳方法