我正在编写一个注册脚本来检查用户名是否已存在。
首先,我在将数据库实例从 databaseconnection.php
到 registration.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/