将数据库和PDO选项数组传递到我的连接PHP文件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数据库和PDO选项数组传递到我的连接PHP文件中相关的知识,希望对你有一定的参考价值。
我正在学习一些php,同时尝试构建我自己的框架作为实践,目前我有一个config.php文件,我存储数据库信息以连接到一些PDO设置,两者都存储在两个不同的数组中。
我还有一个Conectar.php文件来建立连接,在这个conexion(集合)方法必须从我的数组接收数据库和连接数据...
我的问题是我不知道我是否正确传递了这个信息,而且我也不知道如何将我的PDO设置数组传递给连接。任何帮助,将不胜感激!
config.php文件
<?php
$config = array(
"driver" =>"mysql",
"host" =>"localhost",
"user" =>"root",
"pass" =>"root",
"dbname" =>"projecto1",
"charset" =>"utf8"
);
PDOoptions = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING
);
?>
Conectar.php
<?php
class Conectar{
private $driver;
private $host, $user, $pass, $database, $charset;
public function __construct() {
require_once 'config/database.php';
$this->driver=$config["driver"];
$this->host=$config["host"];
$this->user=$config["user"];
$this->pass=$config["pass"];
$this->database=$config["database"];
$this->charset=$config["charset"];
}
public function conexion(){
if($this->driver=="mysql" || $this->driver==null)
{
try
{
$con= new PDO("mysql:host=$config['host'];dbname=$config['dbname']",$config['user'],$config['pass'],charset=$config['charset']);
}
catch(PDOException $e)
{
echo "Error:".$e->getMessage();
}
}
return $con;
}
}
?>
答案
您正在尝试访问$config
函数中无法访问的conexion()
变量。相反,您必须使用在构造函数中定义的类的成员变量:
$con = new PDO("{$this->driver}:host={$this->host};dbname={$this->database};charset={$this->charset}",
$this->user, $this->pass, $this->PDOoptions);
此外,在您的配置文件中,您在$
变量中缺少PDOoptions
。并存储在您的班级:
private $PDOoptions ;
在构造函数中:
$this->PDOoptions = $PDOoptions ;
所以,最终的代码:
class Conectar{
private $driver;
private $host, $user, $pass, $database, $charset;
private $PDOoptions ; // << NEW
public function __construct() {
require_once 'config/database.php';
$this->driver=$config["driver"];
$this->host=$config["host"];
$this->user=$config["user"];
$this->pass=$config["pass"];
$this->database=$config["database"];
$this->charset=$config["charset"];
$this->PDOoptions=$PDOoptions; // << NEW
}
public function conexion(){
$con = null ;
if($this->driver=="mysql" || $this->driver==null)
{
try
{
// NEW // The 2 next lines are changed :
$con = new PDO("mysql:host={$this->host};dbname={$this->database};charset={$this->charset}",
$this->user, $this->pass, $this->PDOoptions);
}
catch(PDOException $e)
{
echo "Error:".$e->getMessage();
}
}
return $con;
}
}
最后,如果驱动程序不是MySQL,则$con
变量是未定义的。因此,为null
创建一个变量以避免通知。
另一答案
$con= new PDO("mysql:host={$config['host']};dbname={$config['dbname']}",$config['user'],$config['pass'],charset=$config['charset']);
你需要在引用的字符串中使用花括号。
以上是关于将数据库和PDO选项数组传递到我的连接PHP文件中的主要内容,如果未能解决你的问题,请参考以下文章