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

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

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

Вот как я это делаю:

Во-первых, вот моя файловая структура(раздетый):

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. что-то подобное...

настроить.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
        }
    }

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

Здесь я действительно считаю, что есть место для значительного улучшения, так как я недавно начал изучать ООП и использовать PDO вместо mysql.
Так что я только что просмотрел пару руководств для начинающих и попробовал разные вещи...

session.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-класс , который extendsмойconnect_pdo-class , у меня есть общедоступная функция с именем getAreaName, которая обрабатывает запрос к моей базе данных.
Довольно аккуратно, я думаю.

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

$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 , я просто ссылаюсь на него, и все готово. Оно работает. Я получаю ожидаемые результаты...

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

Я очень хочу научиться...

91
задан manian 23 May 2017 в 04:07
поделиться