← Back to PHP Course | Chapter 11: Database | Lesson 3 of 21

PHP PDO Introduction

PDO एक universal remote जैसा है जो कई अलग databases के साथ काम करता है। आप एक set of buttons सीखते हैं और इसे MySQL और दूसरों के साथ इस्तेमाल कर सकते हैं।
Syntax
php
$pdo = new PDO("mysql:host=hostname;dbname=database_name", $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$statement = $pdo->query("SELECT * FROM table_name");

PDO क्या है?

PDO (PHP Data Objects) कई अलग database systems से बात करने के लिए एक single, consistent object-oriented API देता है — MySQL, PostgreSQL, SQLite, और और — इसलिए बाद में database switch करने का मतलब आपकी सारी query code फिर से लिखना नहीं है।

उदाहरण: What is PDO?

php
<?php
$pdo = new PDO('sqlite::memory:');
echo get_class($pdo);
// The same PDO API works for MySQL, PostgreSQL, SQLite, and more
?>

PDO Error Modes

आप new PDO($dsn, $user, $password) से एक PDO connection बनाते हैं, जहाँ DSN (Data Source Name) string database driver और connection details specify करती है, जैसे 'mysql:host=localhost;dbname=myapp'।

उदाहरण: PDO Error Modes

php
<?php
// On a real server: new PDO('mysql:host=localhost;dbname=myapp', $user, $password);
$pdo = new PDO('sqlite::memory:');
echo "Connected via DSN";
?>

Queries Execute करना (query)

PDO prepared statements में named placeholders (:name) और positional placeholders (?) दोनों support करता है, mysqli के ज़्यादा rigid parameter binding की तुलना में values bind करने में आपको flexibility देते हुए।

उदाहरण: Executing Queries (query)

php
<?php
// Create a new `PDO` instance with 'sqlite::memory:', stored in `$pdo`
$pdo = new PDO('sqlite::memory:');
$pdo->exec("CREATE TABLE users (id INTEGER, name TEXT)");
// Declare `$stmt`, set to `$pdo->prepare("INSERT INTO users (id, name) VALUES (:id, :name)")`
$stmt = $pdo->prepare("INSERT INTO users (id, name) VALUES (:id, :name)");
$stmt->execute(['id' => 1, 'name' => 'Alice']);
// Print "Inserted using named placeholder" to the output
echo "Inserted using named placeholder";
?>

Statements Execute करना (exec)

PDO::ATTR_ERRMODE को PDO::ERRMODE_EXCEPTION पर set करना PDO को database errors पर चुपचाप false return करने के बजाय real exceptions throw करवाता है, जो strongly recommended है क्योंकि यह failures को गलती से ignore करना असंभव बना देता है।

उदाहरण: Executing Statements (exec)

php
<?php
// Create a new `PDO` instance with 'sqlite::memory:', stored in `$pdo`
$pdo = new PDO('sqlite::memory:');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Try running this block; jump to `catch` if it throws
try {
    $pdo->exec("SELECT * FROM nonexistent_table");
// Catch PDOException $e
} catch (PDOException $e) {
    // Print "Caught exception instead of a silent failure" to the output
    echo "Caught exception instead of a silent failure";
}
?>

PDO Connections बंद करना

क्योंकि PDO कई database engines पर abstract करता है, कई teams default रूप से mysqli के बजाय इसे चुनते हैं, MySQL-only projects के लिए भी, सिर्फ इसके ज़्यादा consistent और modern API और easier future portability के लिए।

उदाहरण: Closing PDO Connections

php
<?php
$pdo = new PDO('sqlite::memory:');
echo "PDO's consistent API is why many teams pick it even for MySQL-only projects";
$pdo = null; // closes the connection
?>
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. PDO::ERRMODE_EXCEPTION set न करना, ताकि errors silent रहें।
  2. user input के साथ query इस्तेमाल करना, जो SQL injection की अनुमति देता है।
  3. exec इस्तेमाल करना और rows वापस मिलने की उम्मीद करना, जबकि यह affected rows की संख्या return करता है।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.