Dari waktu ke waktu saya melihat pertanyaan tentang koneksi ke database.
Kebanyakan jawaban bukanlah cara saya melakukannya, atau saya mungkin tidak mendapatkan jawaban dengan benar. Bagaimanapun; Saya tidak pernah memikirkannya karena cara saya melakukannya berhasil untuk saya.
Tapi inilah pemikiran gila; Mungkin saya melakukan ini semua salah, dan jika itu masalahnya; Saya benar-benar ingin tahu cara menyambung ke database MySQL dengan benar menggunakan PHP dan PDO dan membuatnya mudah diakses.
Begini cara saya melakukannya:
Pertama, inilah struktur file saya (dipreteli) :
public_html/
* index.php
* initialize/
-- load.initialize.php
-- configure.php
-- sessions.php
index.php
Di bagian paling atas, saya punya 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');
Saya tahu ada cara yang lebih baik, atau lebih tepat, untuk memasukkan kelas, tetapi tidak dapat mengingat apa itu. Belum punya waktu untuk memeriksanya, tapi saya pikir ada sesuatu dengan autoload
. sesuatu seperti itu...
configure.php
Di sini saya pada dasarnya hanya mengganti beberapa php.ini properti dan melakukan beberapa konfigurasi global lainnya untuk situs tersebut
connect.php
Saya telah menempatkan koneksi ke kelas sehingga kelas lain dapat memperluas yang satu ini ...
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();
//
Di sini saya percaya ada ruang untuk perbaikan besar-besaran sejak saya baru mulai belajar OOP, dan menggunakan PDO daripada mysql.
Jadi saya baru saja mengikuti beberapa tutorial pemula dan mencoba berbagai hal ...
session.php
Selain menangani sesi reguler, saya juga menginisialisasi beberapa kelas menjadi sesi seperti ini:
if (!isset($_SESSION['sqlQuery'])){
session_start();
$_SESSION['sqlQuery'] = new sqlQuery();
}
Dengan cara ini kelas ini tersedia di semua tempat. Ini mungkin bukan praktik yang baik (?) ...
Bagaimanapun, pendekatan ini memungkinkan saya melakukannya dari mana saja:
echo $_SESSION['sqlQuery']->getAreaName('county',9); // outputs: Aust-Agder (the county name with that id in the database)
Di dalam my sqlQuery
- class , yaitu extends
my connect_pdo
- class , saya memiliki fungsi publik yang disebut getAreaName
yang menangani permintaan ke database saya.
Cukup rapi menurutku.
Bekerja seperti pesona
Jadi pada dasarnya itulah cara saya melakukannya.
Juga, setiap kali saya perlu mengambil sesuatu dari DB saya dari tidak dalam kelas, saya hanya melakukan sesuatu yang mirip dengan ini:
$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);
Karena saya memasukkan koneksi ke dalam variabel di dalamnya connect_pdo.php , saya hanya merujuknya dan saya siap melakukannya. Berhasil. Saya mendapatkan hasil yang saya harapkan ...
Tapi terlepas dari itu; Saya akan sangat menghargai jika kalian bisa memberi tahu saya jika saya jauh dari sini. Apa yang harus saya lakukan, area yang dapat atau harus saya ubah untuk perbaikan, dll ...
Saya ingin sekali belajar ...