अध्याय 16: PHP और डेटाबेस कनेक्शन – भाग 2 (PHP and Database Connection – Part 2)

अध्याय 16: PHP और डेटाबेस कनेक्शन – भाग 2 (PHP and Database Connection – Part 2)

इस अध्याय में, हम PHP और MySQLi के माध्यम से डेटाबेस के साथ और अधिक उन्नत इंटरैक्शन की चर्चा करेंगे। यह अध्याय पिछले अध्याय का विस्तार है, जिसमें हम डेटा को अपडेट करने, हटाने, प्रिपेयर स्टेटमेंट्स का उपयोग करने, ट्रांजैक्शन्स को प्रबंधित करने और MySQLi के उन्नत फीचर्स के बारे में जानेंगे। इन तकनीकों का उपयोग करके, आप अपने वेब एप्लिकेशन को अधिक शक्तिशाली, सुरक्षित और उपयोगकर्ता-अनुकूल बना सकते हैं। यह अध्याय आपको डेटाबेस ऑपरेशन्स को कुशलता से प्रबंधित करने और SQL इंजेक्शन जैसे खतरों से बचने के लिए आवश्यक ज्ञान प्रदान करेगा।

डेटा अपडेट करना (Updating Data)

डेटाबेस में पहले से मौजूद डेटा को अपडेट करना एक सामान्य कार्य है। MySQLi का उपयोग करके डेटाबेस में डेटा को अपडेट करना आसान और सीधा है। इस सेक्शन में, हम HTML फॉर्म का उपयोग करके डेटा अपडेट करने और MySQLi का उपयोग करके डेटाबेस में परिवर्तन करने के लिए आवश्यक कदम और कोड उदाहरण देखेंगे।

HTML फॉर्म बनाना (Creating an HTML Form)

सबसे पहले, हमें एक HTML फॉर्म बनाना होगा, जिससे उपयोगकर्ता डेटा को अपडेट कर सके। उदाहरण के लिए, हम एक साधारण फॉर्म बनाएंगे जिसमें उपयोगकर्ता का नाम और ईमेल पता शामिल होगा।

<!DOCTYPE html>
<html>
<head>
    <title>डेटा अपडेट करें</title>
</head>
<body>
    <h2>डेटा अपडेट करें</h2>
    <form action="update.php" method="post">
        <label for="id">यूज़र ID:</label><br>
        <input type="text" id="id" name="id" required><br><br>
        <label for="name">नाम:</label><br>
        <input type="text" id="name" name="name" required><br><br>
        <label for="email">ईमेल:</label><br>
        <input type="email" id="email" name="email" required><br><br>
        <input type="submit" value="अपडेट करें">
    </form>
</body>
</html>

डेटा अपडेट करने के लिए PHP स्क्रिप्ट (PHP Script to Update Data)

अब, हम एक PHP स्क्रिप्ट बनाएंगे जो HTML फॉर्म से प्राप्त डेटा को MySQL डेटाबेस में अपडेट कर देगी। इसे update.php फाइल में लिखें।

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// कनेक्शन स्थापित करना
$conn = new mysqli($servername, $username, $password, $dbname);

// कनेक्शन की जाँच करना
if ($conn->connect_error) {
    die("कनेक्शन विफल: " . $conn->connect_error);
}

// फॉर्म से डेटा प्राप्त करना
$id = $_POST['id'];
$name = $_POST['name'];
$email = $_POST['email'];

// डेटा अपडेट करने के लिए SQL क्वेरी
$sql = "UPDATE users SET name=?, email=? WHERE id=?";

// प्रिपेयर स्टेटमेंट का उपयोग करना
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssi", $name, $email, $id);

// डेटा अपडेट करना
if ($stmt->execute()) {
    echo "रिकॉर्ड सफलतापूर्वक अपडेट किया गया है।";
} else {
    echo "त्रुटि: " . $sql . "<br>" . $conn->error;
}

// कनेक्शन बंद करना
$stmt->close();
$conn->close();
?>

इस उदाहरण में:

  • सबसे पहले, हम डेटाबेस कनेक्शन स्थापित करते हैं।
  • HTML फॉर्म से डेटा प्राप्त करते हैं।
  • SQL UPDATE क्वेरी का उपयोग करके डेटा को डेटाबेस में अपडेट करते हैं।
  • प्रिपेयर स्टेटमेंट और बाइंड पैरामीटर्स का उपयोग करते हुए डेटा को सुरक्षित रूप से अपडेट करते हैं।
  • सफलतापूर्वक डेटा अपडेट करने पर एक संदेश प्रदर्शित करते हैं, और कनेक्शन को बंद कर देते हैं।

इस सेक्शन में, हमने देखा कि कैसे MySQLi का उपयोग करके HTML फॉर्म से डेटा प्राप्त करके उसे डेटाबेस में अपडेट किया जा सकता है। प्रिपेयर स्टेटमेंट का उपयोग करके, हम SQL इंजेक्शन के खतरों से बच सकते हैं और डेटाबेस ऑपरेशन्स को सुरक्षित बना सकते हैं। अगले सेक्शन में, हम डेटाबेस से डेटा को हटाने के तरीकों पर चर्चा करेंगे।

डेटा हटाना (Deleting Data)

डेटाबेस से डेटा हटाना एक सामान्य कार्य है, जो विभिन्न प्रकार के एप्लिकेशन्स में आवश्यक हो सकता है। MySQLi का उपयोग करके डेटाबेस से डेटा हटाना सरल और सीधा है। इस सेक्शन में, हम HTML फॉर्म का उपयोग करके डेटा हटाने और MySQLi का उपयोग करके डेटाबेस से रिकॉर्ड हटाने के लिए आवश्यक कदम और कोड उदाहरण देखेंगे।

HTML फॉर्म बनाना (Creating an HTML Form)

सबसे पहले, हमें एक HTML फॉर्म बनाना होगा, जिससे उपयोगकर्ता डेटा को हटा सके। उदाहरण के लिए, हम एक साधारण फॉर्म बनाएंगे जिसमें उपयोगकर्ता का आईडी शामिल होगा।

<!DOCTYPE html>
<html>
<head>
    <title>डेटा हटाएं</title>
</head>
<body>
    <h2>डेटा हटाएं</h2>
    <form action="delete.php" method="post">
        <label for="id">यूज़र ID:</label><br>
        <input type="text" id="id" name="id" required><br><br>
        <input type="submit" value="हटाएं">
    </form>
</body>
</html>

डेटा हटाने के लिए PHP स्क्रिप्ट (PHP Script to Delete Data)

अब, हम एक PHP स्क्रिप्ट बनाएंगे जो HTML फॉर्म से प्राप्त आईडी का उपयोग करके MySQL डेटाबेस से रिकॉर्ड को हटा देगी। इसे delete.php फाइल में लिखें।

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// कनेक्शन स्थापित करना
$conn = new mysqli($servername, $username, $password, $dbname);

// कनेक्शन की जाँच करना
if ($conn->connect_error) {
    die("कनेक्शन विफल: " . $conn->connect_error);
}

// फॉर्म से डेटा प्राप्त करना
$id = $_POST['id'];

// डेटा हटाने के लिए SQL क्वेरी
$sql = "DELETE FROM users WHERE id=?";

// प्रिपेयर स्टेटमेंट का उपयोग करना
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $id);

// डेटा हटाना
if ($stmt->execute()) {
    echo "रिकॉर्ड सफलतापूर्वक हटाया गया है।";
} else {
    echo "त्रुटि: " . $sql . "<br>" . $conn->error;
}

// कनेक्शन बंद करना
$stmt->close();
$conn->close();
?>

इस उदाहरण में:

  • सबसे पहले, हम डेटाबेस कनेक्शन स्थापित करते हैं।
  • HTML फॉर्म से आईडी प्राप्त करते हैं।
  • SQL DELETE क्वेरी का उपयोग करके डेटा को डेटाबेस से हटाते हैं।
  • प्रिपेयर स्टेटमेंट और बाइंड पैरामीटर्स का उपयोग करते हुए डेटा को सुरक्षित रूप से हटाते हैं।
  • सफलतापूर्वक डेटा हटाने पर एक संदेश प्रदर्शित करते हैं, और कनेक्शन को बंद कर देते हैं।

इस सेक्शन में, हमने देखा कि कैसे MySQLi का उपयोग करके HTML फॉर्म से डेटा प्राप्त करके उसे डेटाबेस से हटाया जा सकता है। प्रिपेयर स्टेटमेंट का उपयोग करके, हम SQL इंजेक्शन के खतरों से बच सकते हैं और डेटाबेस ऑपरेशन्स को सुरक्षित बना सकते हैं। अगले सेक्शन में, हम प्रिपेयर स्टेटमेंट्स का उपयोग करने के तरीकों पर विस्तार से चर्चा करेंगे।

प्रिपेयर स्टेटमेंट्स (Prepared Statements)

प्रिपेयर स्टेटमेंट्स MySQLi के सबसे महत्वपूर्ण फीचर्स में से एक हैं। ये स्टेटमेंट्स SQL इंजेक्शन के खतरों को कम करने में मदद करते हैं और डेटाबेस क्वेरीज़ को अधिक सुरक्षित और कुशल बनाते हैं। प्रिपेयर स्टेटमेंट्स SQL क्वेरीज़ को पहले से कम्पाइल और ऑप्टिमाइज़ करते हैं, जिससे प्रदर्शन में सुधार होता है। इस सेक्शन में, हम प्रिपेयर स्टेटमेंट्स के उपयोग, उनके लाभ, और कोड उदाहरणों पर चर्चा करेंगे।

प्रिपेयर स्टेटमेंट्स के लाभ (Benefits of Prepared Statements)

  1. सुरक्षा (Security): प्रिपेयर स्टेटमेंट्स SQL इंजेक्शन के खतरों को कम करते हैं क्योंकि क्वेरी पैरामीटर्स को स्वचालित रूप से एस्केप किया जाता है।
  2. प्रदर्शन (Performance): प्रिपेयर स्टेटमेंट्स को पहले से कम्पाइल और ऑप्टिमाइज़ किया जाता है, जिससे प्रदर्शन में सुधार होता है।
  3. क्लीन कोड (Clean Code): प्रिपेयर स्टेटमेंट्स कोड को अधिक पठनीय और प्रबंधनीय बनाते हैं।

प्रिपेयर स्टेटमेंट्स का उपयोग (Using Prepared Statements)

प्रिपेयर स्टेटमेंट्स का उपयोग करने के लिए, निम्नलिखित कदम उठाए जाते हैं:

  1. क्वेरी तैयार करना (Preparing the Query): SQL क्वेरी को तैयार करना।
  2. पैरामीटर्स बाइंड करना (Binding Parameters): क्वेरी पैरामीटर्स को बाइंड करना।
  3. क्वेरी निष्पादित करना (Executing the Query): क्वेरी को निष्पादित करना।

डेटा जोड़ने के लिए प्रिपेयर स्टेटमेंट (Prepared Statement for Inserting Data)

डेटाबेस में डेटा जोड़ने के लिए प्रिपेयर स्टेटमेंट का उपयोग करने का उदाहरण:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// कनेक्शन स्थापित करना
$conn = new mysqli($servername, $username, $password, $dbname);

// कनेक्शन की जाँच करना
if ($conn->connect_error) {
    die("कनेक्शन विफल: " . $conn->connect_error);
}

// डेटा जोड़ने के लिए SQL प्रिपेयर स्टेटमेंट
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";

// प्रिपेयर स्टेटमेंट का उपयोग करना
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $name, $email);

// फॉर्म से डेटा प्राप्त करना
$name = "John Doe";
$email = "john.doe@example.com";

// डेटा जोड़ना
if ($stmt->execute()) {
    echo "नया रिकॉर्ड सफलतापूर्वक जोड़ा गया है।";
} else {
    echo "त्रुटि: " . $sql . "<br>" . $conn->error;
}

// कनेक्शन बंद करना
$stmt->close();
$conn->close();
?>

डेटा पढ़ने के लिए प्रिपेयर स्टेटमेंट (Prepared Statement for Reading Data)

डेटाबेस से डेटा पढ़ने के लिए प्रिपेयर स्टेटमेंट का उपयोग करने का उदाहरण:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// कनेक्शन स्थापित करना
$conn = new mysqli($servername, $username, $password, $dbname);

// कनेक्शन की जाँच करना
if ($conn->connect_error) {
    die("कनेक्शन विफल: " . $conn->connect_error);
}

// डेटा पढ़ने के लिए SQL प्रिपेयर स्टेटमेंट
$sql = "SELECT id, name, email FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $id);

// फॉर्म से डेटा प्राप्त करना (उदाहरण के लिए)
$id = 1;

// डेटा पढ़ना
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    // डेटा को पढ़ना और प्रदर्शित करना
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "कोई रिकॉर्ड नहीं मिला";
}

// कनेक्शन बंद करना
$stmt->close();
$conn->close();
?>

डेटा अपडेट करने के लिए प्रिपेयर स्टेटमेंट (Prepared Statement for Updating Data)

डेटाबेस में डेटा अपडेट करने के लिए प्रिपेयर स्टेटमेंट का उपयोग करने का उदाहरण:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// कनेक्शन स्थापित करना
$conn = new mysqli($servername, $username, $password, $dbname);

// कनेक्शन की जाँच करना
if ($conn->connect_error) {
    die("कनेक्शन विफल: " . $conn->connect_error);
}

// डेटा अपडेट करने के लिए SQL प्रिपेयर स्टेटमेंट
$sql = "UPDATE users SET name=?, email=? WHERE id=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssi", $name, $email, $id);

// फॉर्म से डेटा प्राप्त करना
$id = 1;
$name = "Jane Doe";
$email = "jane.doe@example.com";

// डेटा अपडेट करना
if ($stmt->execute()) {
    echo "रिकॉर्ड सफलतापूर्वक अपडेट किया गया है।";
} else {
    echo "त्रुटि: " . $sql . "<br>" . $conn->error;
}

// कनेक्शन बंद करना
$stmt->close();
$conn->close();
?>

डेटा हटाने के लिए प्रिपेयर स्टेटमेंट (Prepared Statement for Deleting Data)

डेटाबेस से डेटा हटाने के लिए प्रिपेयर स्टेटमेंट का उपयोग करने का उदाहरण:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// कनेक्शन स्थापित करना
$conn = new mysqli($servername, $username, $password, $dbname);

// कनेक्शन की जाँच करना
if ($conn->connect_error) {
    die("कनेक्शन विफल: " . $conn->connect_error);
}

// डेटा हटाने के लिए SQL प्रिपेयर स्टेटमेंट
$sql = "DELETE FROM users WHERE id=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $id);

// फॉर्म से डेटा प्राप्त करना
$id = 1;

// डेटा हटाना
if ($stmt->execute()) {
    echo "रिकॉर्ड सफलतापूर्वक हटाया गया है।";
} else {
    echo "त्रुटि: " . $sql . "<br>" . $conn->error;
}

// कनेक्शन बंद करना
$stmt->close();
$conn->close();
?>

इस सेक्शन में, हमने प्रिपेयर स्टेटमेंट्स का उपयोग करके डेटा जोड़ने, पढ़ने, अपडेट करने और हटाने के तरीकों पर चर्चा की। प्रिपेयर स्टेटमेंट्स SQL इंजेक्शन के खतरों से बचाने और प्रदर्शन को सुधारने में मदद करते हैं। अगले सेक्शन में, हम ट्रांजैक्शन्स का उपयोग करने के तरीकों पर चर्चा करेंगे।

ट्रांजैक्शन्स (Transactions)

ट्रांजैक्शन्स डेटाबेस ऑपरेशन्स का एक महत्वपूर्ण हिस्सा हैं, जो आपको एक समूह के रूप में कई SQL क्वेरीज़ को निष्पादित करने की अनुमति देते हैं। यदि किसी भी क्वेरी में कोई त्रुटि होती है, तो आप पूरी ट्रांजैक्शन को रिवर्ट (rollback) कर सकते हैं, जिससे डेटा की अखंडता (integrity) बनी रहती है। MySQLi का उपयोग करके ट्रांजैक्शन्स को प्रबंधित करना आसान है और यह आपको डेटाबेस ऑपरेशन्स पर अधिक नियंत्रण प्रदान करता है।

ट्रांजैक्शन्स का महत्व (Importance of Transactions)

  1. डेटा अखंडता (Data Integrity): ट्रांजैक्शन्स आपको सुनिश्चित करने में मदद करते हैं कि सभी SQL ऑपरेशन्स सफलतापूर्वक पूरी हो रही हैं, अन्यथा सभी परिवर्तन वापस ले लिए जाते हैं।
  2. एटॉमिकिटी (Atomicity): एक ट्रांजैक्शन एटॉमिक होता है, जिसका मतलब है कि या तो सभी ऑपरेशन्स सफलतापूर्वक पूरी होंगी, या कोई भी ऑपरेशन नहीं होगा।
  3. कंसिस्टेंसी (Consistency): ट्रांजैक्शन्स डेटाबेस को एक कंसिस्टेंट स्थिति में बनाए रखते हैं।
  4. आइसोलेशन (Isolation): ट्रांजैक्शन्स एक दूसरे से आइसोलेट रहती हैं, जिससे एक ट्रांजैक्शन का प्रभाव दूसरे पर नहीं पड़ता।
  5. ड्यूरेबिलिटी (Durability): एक बार ट्रांजैक्शन पूरी हो जाने के बाद, परिवर्तन स्थायी हो जाते हैं।

ट्रांजैक्शन्स का उपयोग (Using Transactions)

MySQLi में ट्रांजैक्शन्स का उपयोग करने के लिए, निम्नलिखित कदम उठाए जाते हैं:

  1. ट्रांजैक्शन शुरू करना (Starting a Transaction): begin_transaction() या autocommit(FALSE) का उपयोग करके ट्रांजैक्शन शुरू करें।
  2. क्वेरी निष्पादित करना (Executing Queries): आवश्यक SQL क्वेरीज़ निष्पादित करें।
  3. ट्रांजैक्शन को कमिट करना (Committing the Transaction): यदि सभी क्वेरी सफल होती हैं, तो commit() का उपयोग करके ट्रांजैक्शन को कमिट करें।
  4. रोलबैक करना (Rolling Back): यदि किसी भी क्वेरी में त्रुटि होती है, तो rollback() का उपयोग करके सभी परिवर्तन वापस ले लें।

उदाहरण (Example)

php

Copy code

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// कनेक्शन स्थापित करना
$conn = new mysqli($servername, $username, $password, $dbname);

// कनेक्शन की जाँच करना
if ($conn->connect_error) {
    die("कनेक्शन विफल: " . $conn->connect_error);
}

// ट्रांजैक्शन शुरू करना
$conn->begin_transaction();

try {
    // क्वेरी 1: डेटा जोड़ना
    $sql1 = "INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com')";
    $conn->query($sql1);

    // क्वेरी 2: डेटा अपडेट करना
    $sql2 = "UPDATE accounts SET balance = balance - 100 WHERE user_id = 1";
    $conn->query($sql2);

    // क्वेरी 3: डेटा अपडेट करना
    $sql3 = "UPDATE accounts SET balance = balance + 100 WHERE user_id = 2";
    $conn->query($sql3);

    // सभी क्वेरी सफल होने पर ट्रांजैक्शन को कमिट करना
    $conn->commit();
    echo "ट्रांजैक्शन सफलतापूर्वक पूरी हो गई।";
} catch (Exception $e) {
    // त्रुटि होने पर रोलबैक करना
    $conn->rollback();
    echo "ट्रांजैक्शन विफल: " . $e->getMessage();
}

// कनेक्शन बंद करना
$conn->close();
?>

इस उदाहरण में:

  • सबसे पहले, हम डेटाबेस कनेक्शन स्थापित करते हैं।
  • begin_transaction() का उपयोग करके ट्रांजैक्शन शुरू करते हैं।
  • तीन क्वेरीज़ निष्पादित करते हैं: एक डेटा जोड़ने के लिए और दो डेटा अपडेट करने के लिए।
  • यदि सभी क्वेरी सफल होती हैं, तो commit() का उपयोग करके ट्रांजैक्शन को कमिट करते हैं।
  • यदि किसी भी क्वेरी में त्रुटि होती है, तो rollback() का उपयोग करके सभी परिवर्तन वापस ले लेते हैं।

इस सेक्शन में, हमने देखा कि कैसे MySQLi का उपयोग करके ट्रांजैक्शन्स को प्रबंधित किया जा सकता है। ट्रांजैक्शन्स डेटा अखंडता को बनाए रखने और डेटाबेस ऑपरेशन्स को अधिक सुरक्षित और विश्वसनीय बनाने में मदद करते हैं। अगले सेक्शन में, हम MySQLi के उन्नत फीचर्स पर चर्चा करेंगे।



Table of Contents

Index