บางครั้งฉันเห็นคำถามเกี่ยวกับการเชื่อมต่อกับฐานข้อมูล
คำตอบส่วนใหญ่ไม่ใช่วิธีที่ฉันทำหรือฉันอาจจะไม่ได้รับคำตอบที่ถูกต้อง อย่างไรก็ตาม; ฉันไม่เคยคิดเกี่ยวกับเรื่องนี้เพราะวิธีที่ฉันทำมันเหมาะกับฉัน
แต่นี่เป็นความคิดที่บ้าคลั่ง บางทีฉันอาจจะทำผิดทั้งหมดและถ้าเป็นเช่นนั้น ฉันต้องการทราบวิธีการเชื่อมต่อกับฐานข้อมูล 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
ขึ้น อะไรแบบนั้น...
config.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 และใช้ PDO แทน mysql
ดังนั้นฉันเพิ่งทำตามบทแนะนำสำหรับผู้เริ่มต้นสองสามบทและลองใช้สิ่งต่างๆ ...
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)
ภายในของฉัน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ฉันแค่อ้างถึงมันและฉันก็พร้อมที่จะไป มันได้ผล. ฉันได้ผลลัพธ์ที่คาดหวัง ...
แต่ไม่คำนึงถึงสิ่งนั้น ฉันจะขอบคุณมากถ้าพวกคุณสามารถบอกฉันได้ว่าฉันจะออกจากที่นี่ สิ่งที่ฉันควรทำแทนพื้นที่ที่ฉันทำได้หรือควรเปลี่ยนเพื่อปรับปรุง ฯลฯ ...
ฉันกระตือรือร้นที่จะเรียนรู้ ...