如何正确设置PDO连接

如何正确设置PDO连接

我不时会看到关于连接数据库的问题。
大多数答案不是我做的那样,或者我可能得不到正确的答案。无论如何,我从来没有想过这件事,因为我这样做是为了我自己。

但是这里有一个疯狂的想法;也许我做错了,如果是这样的话;我真的很想知道如何使用PHP和PDO正确地连接到MySQL数据库,并使它更容易访问。

我就是这样做的:

首先,这是我的文件结构(脱去):

public_html/* index.php  

* initialize/  
  -- load.initialize.php  
  -- configure.php  
  -- sessions.php

index.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。
所以我刚刚学习了几个初学者的教程,并尝试了不同的东西.




12345678_0001
浏览 779回答 3
3回答

烙印99

我建议不要用$_SESSION若要全局访问DB连接,请执行以下操作。你可以做几件事中的一件(按顺序)从坏到最好(做法):存取$dbh使用global $dbh在您的函数和类中使用单例注册表,并全局访问该注册表,如下所示:$registry&nbsp;=&nbsp;MyRegistry::getInstance();$dbh&nbsp;=&nbsp;$registry->getDbh();将数据库处理程序注入需要它的类,如下所示:class&nbsp;MyClass&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct($dbh)&nbsp;{&nbsp;/*&nbsp;...&nbsp;*/&nbsp;}}我强烈推荐最后一个。它被称为依赖注入(DI),倒置控制(IoC),或简单的好莱坞原则(不要打电话给我们,我们会打电话给你)。然而,它是一个更先进的,需要更多的“布线”没有框架。因此,如果依赖项注入对您来说太复杂了,请使用单例注册中心而不是一堆全局变量。
打开App,查看更多内容
随时随地看视频慕课网APP