为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确设置PDO连接

如何正确设置PDO连接

12345678_0001 2019-06-01 16:20:15
如何正确设置PDO连接我不时会看到关于连接数据库的问题。大多数答案不是我做的那样,或者我可能得不到正确的答案。无论如何,我从来没有想过这件事,因为我这样做是为了我自己。但是这里有一个疯狂的想法;也许我做错了,如果是这样的话;我真的很想知道如何使用PHP和PDO正确地连接到MySQL数据库,并使它更容易访问。我就是这样做的:首先,这是我的文件结构(脱去):public_html/* index.php   * initialize/     -- load.initialize.php     -- configure.php     -- sessions.phpindex.php在最上面,我require('initialize/load.initialize.php');.load.initialize.php#   site configurations     require('configure.php');#   connect to database     require('root/somewhere/connect.php');  //  this file is placed outside of public_html for better security.#   include classes     foreach (glob('assets/classes/*.class.php') as $class_filename){         include($class_filename);     }#   include functions     foreach (glob('assets/functions/*.func.php') as $func_filename){         include($func_filename);     }#   handle sessions     require('sessions.php');我知道有一种更好或者更正确的方法来包含类,但是我不记得它是什么。还没来得及调查,但我觉得autoload..差不多吧.。figre.php在这里,我基本上只是覆盖了一些php.ini-属性并为站点执行其他全局配置connect.php我已经将连接放到一个类上,以便其他类可以延展这个.。class connect_pdo{     protected $dbh;     public function __construct()     {         try {             $db_host = '  ';  //  hostname             $db_name = '  ';  //  databasename             $db_user = '  ';  //  username             $user_pw = '  ';  //  password             $con = new PDO('mysql:host='.$db_host.'; dbname='.$db_name, $db_user, $user_pw);               $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );             $con->exec("SET CHARACTER SET utf8");  //  return all sql requests as UTF-8           }         catch (PDOException $err) {               echo "harmless error message if the connection fails";             $err->getMessage() . "<br/>";             file_put_contents('PDOErrors.txt',$err, FILE_APPEND);  // write some details to an error-log outside public_html               die();  //  terminate connection         }     }在这里,我相信有巨大的改进空间,因为我最近开始学习OOP,并使用PDO而不是MySQL。所以我刚刚学习了几个初学者的教程,并尝试了不同的东西.
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

我建议不要用$_SESSION若要全局访问DB连接,请执行以下操作。

你可以做几件事中的一件(按顺序)从坏到最好(做法):

  • 存取

    $dbh

    使用

    global $dbh

    在您的函数和类中
  • 使用单例注册表,并全局访问该注册表,如下所示:

    $registry = MyRegistry::getInstance();$dbh = $registry->getDbh();
  • 将数据库处理程序注入需要它的类,如下所示:

    class MyClass {
        public function __construct($dbh) { /* ... */ }}

我强烈推荐最后一个。它被称为依赖注入(DI),倒置控制(IoC),或简单的好莱坞原则(不要打电话给我们,我们会打电话给你)。

然而,它是一个更先进的,需要更多的“布线”没有框架。因此,如果依赖项注入对您来说太复杂了,请使用单例注册中心而不是一堆全局变量。


查看完整回答
反对 回复 2019-06-01
  • 3 回答
  • 0 关注
  • 778 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信