Час від часу я бачу запитання щодо підключення до бази даних.
Більшість відповідей - це не так, як я це роблю, або я можу просто не правильно отримати відповіді. У всякому разі; Я ніколи про це не думав, бо те, як я це роблю, працює для мене.
Але ось божевільна думка; Можливо, я все це роблю неправильно, і якщо це так; Мені б дуже хотілося знати, як правильно підключитися до бази даних 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
. щось схоже...
configure.php
Тут я в основному просто переоцінюю деякі php.ini -properties і роблю деякі інші глобальні налаштування для сайту
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
- клас , у мене є публічна функція під назвою , 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 , я просто посилаюся на нього, і я готовий піти. Це працює. Я отримую очікувані результати ...
Але незалежно від цього; Я був би дуже вдячний, якщо б ви, хлопці, могли сказати мені, чи я далеко тут. Що я повинен робити замість цього, сфери, які я міг би або повинен змінити для вдосконалення тощо ...
Я прагну вчитися ...