将数据库和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文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pdo 将字符串数组传递给 php 中的 plsql 例程

PDO 将一个简单的数组插入 MySQL 数据库

将Javascript数组传递给PHP文件[重复]

Laravel:连接错误PDO

如何使用 PDO 在 PHP 中获取结果数组?

如何使用 PDO 在 PHP 中获取结果数组?