【发布时间】:2014-03-28 14:02:17
【问题描述】:
我有一个 db 连接函数和一个抽象数据库类,基于我的结构方式。我必须继续将我的 PDO 连接代码添加到构造函数中。
我的 config.php 我有
function dbconnect()
{
$dbh; // database handler
$host = 'localhost';
$user = 'root';
$pass = '';
$dbname = 'test101';
$error;
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
);
// Create a new PDO instanace
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
在我的 abstract.class.php 中
include_once('config/config.php');
class Database {
public function __construct() {
dbconnect(); //connect to database
}
public function query($query) {
$this->stmt = $this->dbh->prepare($query);
}
}
$database = New Database();
不在 config.php 我有一个数据库处理程序$dbh,在 abstract.class.php 我在查询函数中调用它。
我的问题
我收到一个错误Undefined property: Database::$dbh。如何将它从我的 config.php 传递给 abstract.class.php?我认为当您使用 PHP 包含时,这与将该文件中的任何内容复制并粘贴到您想要使用它的文件中是一样的。我如何将$dbh 从 config.php 传递到 abstract.class.php 请随时就可能发生的任何问题或任何与我的 PDO 连接有关的安全问题提出建议。
如果我在构造函数中复制并传递我的函数并将数据库连接变量设置为构造函数之外的private $dbh;,则此方法有效,但问题是当我不需要时总是必须包含该类。有时我可能只需要连接到数据库,我还想将define salt 添加到 config.php
【问题讨论】:
-
你认为在
dbconnect函数中定义的__construct函数会做什么? -
@zerkms 抱歉,当我复制代码时忘记编辑该部分
-
问题仍未解决。它们只是 2 个嵌套函数。
-
@user3057514:它指向当前对象
-
@user3057514 在您的数据库类中您正在调用 $this->dbh,但是该类中不存在 dbh,因此在您的 dbconnect 函数中,返回 $dbh,然后分配 $this-> dbh = dbconnect();