データベースへの接続に関する質問がときどきあります。
ほとんどの答えは私がそれをする方法ではありません、または私はちょうど答えを正しく得ないかもしれません。とにかく; 自分のやり方がうまくいくので、私はそれについて考えたことはありません。
しかし、これはおかしな考えです。多分私はこれをすべて間違っています、そしてそれが事実なら。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
。そんな感じ...
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();
//
ここで私は最近OOPを学び始め、mysqlの代わりにPDOを使用して以来、大幅な改善の余地があると確信しています。
だから私はいくつかの初心者向けチュートリアルをたどって、さまざまなものを試しました...
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)
my sqlQuery
- classの内側にあるextends
my connect_pdo
- classにはgetAreaName
、データベースへの要求を処理するというパブリック関数が呼び出されています。
かなりきちんと思います。
チャームのように機能する
ので、基本的にはそれが私のやり方です。
また、クラス内からではなくDBから何かをフェッチする必要があるときはいつでも、次のようなことを行います。
$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内の変数に入れたので、それを参照するだけでいいのです。できます。期待した結果が得られます...
しかし、それに関係なく。私がここにいるのかどうか教えていただければ幸いです。代わりにすべきこと、改善のために変更できる、または変更すべき領域など...
私は学びたいです...