Как правильно настроить соединение PDO

Время от времени я вижу вопросы о подключении к базе данных.
Большинство ответов - это не то, как я это делаю, или я могу просто не получить правильные ответы. Тем не мение; Я никогда не думал об этом, потому что то, как я это делаю, работает для меня.

Но вот сумасшедшая мысль; Может быть, я делаю все это неправильно, и если это так; Мне бы очень хотелось узнать, как правильно подключиться к базе данных MySQL с помощью PHP и PDO и сделать ее легко доступной.

Here's how I'm doing it:

Прежде всего, вот моя файловая структура(stripped down):

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');

I know there's a better, or more correct, way to include classes, but can't remember what it was. Haven't gotten the time to look into it yet, but I think it was something with autoload. something like that...

configure.php
Здесь я в основном просто переопределить некоторыеphp.ini-свойства и сделать некоторые другие глобальные настройки для сайта

connect.php
Я поместил соединение в класс, чтобы другие классы моглиextends этот...

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
        }
    }

    public function dbh()
    {
        return $this->dbh;
    }
}
#   put database handler into a var for easier access
    $con = new connect_pdo();
    $con = $con->dbh();
//

Here I do believe there's room for massive improvement since I recently started learning OOP, and using PDO instead of mysql.
So I've just followed a couple of beginners tutorials and tried out different stuff...

sessions.php
Помимо обработки обычных сессий, я также инициализирую некоторые классы в сессию, подобную этой:

if (!isset($_SESSION['sqlQuery'])){
    session_start();
    $_SESSION['sqlQuery'] = new sqlQuery();
}

Таким образом, этот класс доступен повсюду. Это не может быть хорошей практикой (?) ...
Во всяком случае, это то, что этот подход позволяет мне делать везде:

echo $_SESSION['sqlQuery']->getAreaName('county',9);  // outputs: Aust-Agder (the county name with that id in the database)

Внутри моегоsqlQuery-class, которыйextends мойconnect_pdo-classУ меня есть публичная функция под названиемgetAreaName который обрабатывает запрос к моей базе данных.
Довольно аккуратно, я думаю.

Works like a charm
Так вот, в основном, как я это делаю.
Кроме того, всякий раз, когда мне нужно извлечь что-то из моей БД не из класса, я просто делаю что-то похожее на это:

$id = 123;

$sql = 'SELECT whatever FROM MyTable WHERE id = :id';
$qry = $con->prepare($sql);
$qry -> bindParam(':id', $id, PDO::PARAM_INT);
$qry -> execute();
$get = $qry->fetch(PDO::FETCH_ASSOC);

Так как я поместил соединение в переменную внутриconnect_pdo.phpЯ просто ссылаюсь на это, и мне пора. Оно работает. Я получаю ожидаемые результаты ...

Но независимо от этого; Я был бы очень признателен, если бы вы, ребята, могли бы сказать мне, если я далеко отсюда. Что я должен сделать вместо этого, области, которые я мог или должен изменить для улучшения и т.д ...

Я хочу учиться ...

Ответы на вопрос(4)

Ваш ответ на вопрос