इन वीडियो ट्यूटोरियल के साथ समस्या उनके लेखकों की है, जिनके पास इस विषय पर कोई सुराग नहीं है, जिससे परिणाम बहुत खराब हो जाता है यदि आप उनके मानसिक मलमूत्र का उपयोग नहीं कर रहे थे। वे जो नुकसान पहुंचा रहे हैं वह इतना बुरा है कि मुझे एक समर्पित लेख भी लिखना पड़ा जो बताता है कि ये सभी असहाय "रैपर" किसी भी वास्तविक जीवन अनुप्रयोग के लिए पूरी तरह से अनुपयोगी क्यों हैं, आपके पहले डेटाबेस रैपर के बचपन के रोग .
उदाहरण के लिए इस रैपर को वीडियो से लें:
- त्रुटि रिपोर्टिंग पूरी तरह से त्रुटिपूर्ण है
- चयनों के लिए एक बेकार कार्य।
- स्टेटफुलनेस
- संरक्षित पीडीओ उदाहरण
तो, संक्षेप में, आप इस "रैपर" से प्राप्त करने में असमर्थ होंगे, यहां तक कि इन्सर्ट आईडी जैसी मूर्खतापूर्ण चीज भी। और कोई त्रुटि रिपोर्टिंग समस्या को समझने में भी आपकी मदद नहीं कर सकती है।
अपने कोड के अनुसार, बस अपने आप को एक SQL कीवर्ड टाइप करने से बचाने के लिए सौदेबाजी न करें। यह मूर्खता है। एसक्यूएल एक कीमती चीज है, इसे कुछ अस्पष्ट शॉर्टकट के पक्ष में खारिज न करें। न तो आपको पीडीओ को एक अपंग अमान्य की स्थिति में कम करना चाहिए, इसकी सबसे शानदार विशेषताओं को मिटा देना चाहिए।
आपके रैपर को सभी पीडीओ और एसक्यूएल सुविधाओं को त्यागने के बजाय सुलभ बनाना चाहिए। तो यह जाता है:
class DB
{
protected static $instance;
protected $pdo;
protected function __construct() {
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => FALSE,
);
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
$this->pdo = new PDO($dsn, DB_USER, DB_PASS, $opt);
}
// a classical static method to make it universally available
public static function instance()
{
if (self::$instance === null)
{
self::$instance = new self;
}
return self::$instance;
}
// a proxy to native PDO methods
public function __call($method, $args)
{
return call_user_func_array(array($this->pdo, $method), $args);
}
// a helper function to run prepared statements smoothly
public function run($sql, $args = [])
{
$stmt = $this->pdo->prepare($sql);
$stmt->execute($args);
return $stmt;
}
}
यह आवरण दस गुना सरल है और साथ ही वीडियो से दस गुना अधिक शक्तिशाली है।
और अब आपकी कक्षा
class Schedule
{
private $_db;
public function __construct()
{
$this->_db = DB::instance();
}
public function listGames()
{
$data = $this->_db->query('SELECT * FROM games')->fetchAll();
var_dump($data);
echo '<br>';
}
}
यहां रहस्य यह है कि पीडीओ आपको पहले से ही ऑब्जेक्ट डेटा दे सकता है, कोडिंग की एक भी अतिरिक्त लाइन नहीं।
हालाँकि यह सरल उदाहरण बहुत प्रभावशाली नहीं है, यहाँ रहस्य यह है कि यह आवरण किसी अन्य उदाहरण के लिए भी आपकी सेवा करेगा, जब वह वीडियो से घुट जाएगा। किसी अन्य उदाहरण के बारे में सोचने की कोशिश करें और मैं आपको दिखाऊंगा कि यह आवरण कितना सरल लेकिन शक्तिशाली है।