Jak prawidłowo skonfigurować połączenie PDO

Od czasu do czasu widzę pytania dotyczące łączenia się z bazą danych.
Większość odpowiedzi to nie jest sposób, w jaki to robię, albo mogę po prostu nie uzyskać prawidłowych odpowiedzi. Tak czy inaczej; Nigdy o tym nie myślałem, ponieważ sposób, w jaki to robię, działa na mnie.

Ale tu jest szalona myśl; Może robię to wszystko źle, a jeśli tak jest; Naprawdę chciałbym wiedzieć, jak poprawnie połączyć się z bazą danych MySQL przy użyciu PHP i PDO i uczynić go łatwo dostępnym.

Oto jak to robię:

Po pierwsze, oto moja struktura plików(rozebrany):

public_html/

* index.php  

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

index.php
Na samym szczycie mamrequire('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');

Wiem, że istnieje lepszy lub bardziej poprawny sposób włączenia klas, ale nie pamiętam, co to było. Nie zdążyłem jeszcze zajrzeć do tego, ale myślę, że to było cośautoload. coś w tym stylu...

configure.php
Tutaj po prostu nadpisuję niektórephp.ini-properties i wykonaj inną globalną konfigurację witryny

connect.php
Połączyłem połączenie z klasą, aby inne klasy mogłyrozciąga się ten...

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();
//

Tutaj wierzę, że jest miejsce na ogromną poprawę, odkąd niedawno zacząłem uczyć się OOP i używać PDO zamiast mysql.
Po prostu śledziłem kilka samouczków dla początkujących i wypróbowałem różne rzeczy ...

session.php
Oprócz obsługi zwykłych sesji, inicjalizuję niektóre klasy w sesji takiej jak ta:

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

W ten sposób ta klasa jest dostępna w każdym miejscu. To może nie być dobra praktyka (?) ...
W każdym razie to właśnie pozwala mi to robić wszędzie:

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

W moimsqlQuery-klasa, któryextends mójconnect_pdo-klasa, Mam funkcję publiczną o nazwiegetAreaName który obsługuje żądanie do mojej bazy danych.
Myślę, że całkiem fajnie.

Działa jak marzenie
Więc w zasadzie to robię.
Ponadto zawsze, gdy muszę pobrać coś z mojej bazy danych nie z klasy, robię coś podobnego do tego:

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

Odkąd umieściłem połączenie w zmiennej wewnątrzconnect_pdo.php, Po prostu się do tego odnosiłem i dobrze jest iść. To działa. Otrzymuję oczekiwane wyniki ...

Ale niezależnie od tego; Naprawdę byłbym wdzięczny, gdybyście mogli mi powiedzieć, czy jestem tutaj daleko. Co powinienem zamiast tego zrobić, obszary, które mógłbym lub powinienem zmienić w celu poprawy itp ...

Jestem chętny do nauki ...

questionAnswers(4)

yourAnswerToTheQuestion