【发布时间】:2015-08-04 10:54:41
【问题描述】:
我在 generic.php 中有一个名为 generic 的类。我有一个必须执行 SQL 查询的 signup.php 文件。但是,我无法访问存储在变量 $db 中的 generic.php 中创建的 PDO 对象。
Generic 类如下所示:
class Generic {
public $db;
public function connect_database() {
define('USER', 'user');
define('PASSWORD', 'password');
// Database connection
try {
$connection_string = 'mysql:host=localhost;dbname=mydb;charset=utf8';
$connection_array = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO($connection_string, USER, PASSWORD, $connection_array);
echo 'Database connection established';
}
catch(PDOException $e) {
$db = null;
}
}
}
我尝试访问 $db 变量(其中存储了 PDO 对象),但我收到错误消息 Call to a member function prepare() on a non-object in...。这就是我的 signup.php 文件当前的样子:
// Require needed classes
require_once('generic.php');
// Create needed objects
$generic = new Generic();
$datetime = date("Y-m-d H:i:s");
try {
$sql = "INSERT INTO user(
email,
name,
username,
password
)
VALUES(
:email,
:name,
:username,
:password
)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':email', 'myemail@email.com', PDO::PARAM_STR);
$stmt->bindParam(':name', 'John Doe', PDO::PARAM_STR);
$stmt->bindParam(':username', 'johndow', PDO::PARAM_STR);
// use PARAM_STR although a number
$stmt->bindParam(':password', 'test123', PDO::PARAM_STR);
$stmt->execute();
}
catch(PDOException $e) {
echo $e;
}
我在我的 signup.php 文件中找不到通过数据库连接获取 $db 变量的方法,因此我可以执行查询。我试过$db = $generic->db,但没有任何区别。
我是 OOP PHP 新手,正在尝试一些东西。我希望这个问题能解释我的问题。
【问题讨论】: