我正在努力建立一个用户登录注册系统。所有事情都进展顺利,但当我尝试插入时,我得到一个致命的错误,它说
致命错误:在第11行的C:\ xampp \ htdocs \ LoginRegister \ LoginRegistration \ functions.php中的非对象上调用成员函数prepare()
我搜索过并找到一些主题,说数据库变量应该是global
。但它对我不起作用。任何人都可以告诉我问题出在哪里?
先谢谢了。
这是我的 config.php 文件。
<?php
class DatabaseConnection{
public function __construct(){
try{
$db = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
}
catch (PDOEXCEPTION $e){
die("ERROR Database Connection:".$e->getMessage());
}
}
}
?>
这是我的 functions.php 文件。
<?php
require "config.php";
class LoginRegistration{
function __construct(){
$database = new DatabaseConnection();
}
public function resigterUser($username, $password, $name, $email, $website){
global $db;
$query = $db->prepare("SELECT id FROM users WHERE username = ? AND email = ?");
$query->execute(array($username, $email));
$num = $query->rowCount();
if($num == 0){
$query = $db->prepare("INSERT INTO users (username, password, name, email, website) VALUES (?, ?, ?, ?, ?)");
$query->execute(array($username, $password, $name, $email, $website));
return true;
}
else{
return print "<span style='color:#e53d37'>Error... username/email already exist!</span>";
}
}
}
?>
答案 0 :(得分:4)
class DatabaseConnection{
public function __construct(){
try{
$db = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
这会将pdo实例分配给构造函数方法的local scope中的变量$ db。保留此方法后,$ db将无法访问。
您可以尝试类似
的内容<?php
class DatabaseConnectionProvider {
protected $pdo;
public function __construct() {
$this->pdo = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
}
public function getConnection() {
return $this->pdo;
}
}
class LoginRegistration{
protected $dbp;
function __construct(DatabaseConnectionProvider $dbp) {
$this->dbp = $dbp;
}
public function registerUser($username, $password, $name, $email, $website) {
$pdo = $this->dbp->getConnection();
$query = $pdo->prepare("SELECT id FROM users WHERE username = ? AND email = ?");
答案 1 :(得分:1)
像这样更改您的配置代码
<?php
class DatabaseConnection{
public function __construct(){
try{
global $db;
$db = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
}
catch (PDOEXCEPTION $e){
die("ERROR Database Connection:".$e->getMessage());
}
}
}
?>