मैं समय-समय पर डेटाबेस से जुड़ने से संबंधित प्रश्न देखता हूं।
अधिकांश उत्तर मैं ऐसा करने का तरीका नहीं है, या हो सकता है कि मुझे सही उत्तर न मिले हों। वैसे भी, मैंने इसके बारे में कभी नहीं सोचा क्योंकि मैं जिस तरह से करता हूं वह मेरे लिए काम करता है।
लेकिन यहाँ एक पागल विचार है; शायद मैं यह सब गलत कर रहा हूँ, और अगर ऐसा है; मैं वास्तव में जानना चाहूंगा कि 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)
अंदर मेरी 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 के अंदर एक वेरिएबल में कनेक्शन डाला है , मुझे सिर्फ इसका जिक्र करना है और मैं जाने के लिए अच्छा हूँ। यह काम करता हैं। मुझे मेरे अपेक्षित परिणाम मिले ...
लेकिन इसकी परवाह किए बिना; मैं वास्तव में सराहना करूंगा यदि आप लोग मुझे बता सकते हैं कि क्या मैं यहां से दूर हूं। इसके बजाय मुझे क्या करना चाहिए, जिन क्षेत्रों में सुधार के लिए मुझे बदलाव करना चाहिए या बदलना चाहिए ...
मैं सीखने के लिए उत्सुक हूं ...