Access
 sql >> डेटाबेस >  >> RDS >> Access

आपको डेटाबेस एक्सेस के लिए PHPs PDO का उपयोग क्यों करना चाहिए?

कई PHP प्रोग्रामर ने MySQL या MySQLi एक्सटेंशन का उपयोग करके डेटाबेस तक पहुंच बनाना सीखा। PHP 5.1 के अनुसार, एक बेहतर तरीका है। PHP डेटा ऑब्जेक्ट (PDO) तैयार किए गए कथनों और ऑब्जेक्ट्स के साथ काम करने के तरीके प्रदान करता है जो आपको अधिक उत्पादक बना देगा!

CRUD जेनरेटर और फ्रेमवर्क

डेटाबेस कोड दोहराव वाला है, लेकिन सही होने के लिए बहुत महत्वपूर्ण है। यहीं पर PHP CRUD जेनरेटर और फ्रेमवर्क आते हैं—वे इस सभी दोहराव वाले कोड को स्वचालित रूप से जनरेट करके आपका समय बचाते हैं ताकि आप ऐप के अन्य हिस्सों पर ध्यान केंद्रित कर सकें।

कोडकैनियन पर, आपको सीआरयूडी जनरेटर और फ्रेमवर्क मिलेंगे जो आपको उत्कृष्ट गुणवत्ता वाले उत्पादों को समय पर वितरित करने में मदद करेंगे। (सीआरयूडी डेटाबेस के लिए बुनियादी जोड़तोड़ बनाने, पढ़ने, अपडेट करने और हटाने के लिए एक संक्षिप्त शब्द है।)

  • PHP9 उपयोगी PHP CRUD जेनरेटर और फ्रेमवर्क CodeCanyonFranc लुकास पर उपलब्ध हैं
  • PHP पीडीओ एडवांस्ड सीआरयूडी जेनरेटर टूल सजल सोनी के साथ एक PHP सीआरयूडी इंटरफेस जल्दी से बनाएं

पीडीओ का परिचय

PDO—PHP डेटा ऑब्जेक्ट—एक डेटाबेस एक्सेस लेयर है जो कई डेटाबेस तक पहुंच का एक समान तरीका प्रदान करता है।

यह डेटाबेस-विशिष्ट सिंटैक्स के लिए जिम्मेदार नहीं है, लेकिन कई उदाहरणों में कनेक्शन स्ट्रिंग को स्विच करके, डेटाबेस और प्लेटफ़ॉर्म को स्विच करने की प्रक्रिया को काफी दर्द रहित होने की अनुमति दे सकता है।

यह ट्यूटोरियल एसक्यूएल पर पूर्ण कैसे-कैसे होने के लिए नहीं है। यह मुख्य रूप से उन लोगों के लिए लिखा गया है जो वर्तमान में mysql . का उपयोग कर रहे हैं या mysqli उन्हें अधिक पोर्टेबल और शक्तिशाली पीडीओ बनाने में मदद करने के लिए एक्सटेंशन।

जब PHP में डेटाबेस संचालन की बात आती है, तो पीडीओ कच्चे सिंटैक्स पर बहुत सारे फायदे प्रदान करता है। आइए शीघ्रता से कुछ सूचीबद्ध करें:

  • अमूर्त परत
  • ऑब्जेक्ट-ओरिएंटेड सिंटैक्स
  • तैयार बयानों के लिए समर्थन
  • बेहतर अपवाद प्रबंधन
  • सुरक्षित और पुन:प्रयोज्य API
  • सभी लोकप्रिय डेटाबेस के लिए समर्थन

डेटाबेस समर्थन

एक्सटेंशन किसी भी डेटाबेस का समर्थन कर सकता है जिसके लिए पीडीओ ड्राइवर लिखा गया है। इस लेखन के समय, निम्नलिखित डेटाबेस ड्राइवर उपलब्ध हैं:

  • PDO_DBLIB (फ्रीटीडीएस/माइक्रोसॉफ्ट एसक्यूएल सर्वर/साइबेस)
  • PDO_FIREBIRD (फायरबर्ड/इंटरबेस 6)
  • PDO_IBM (आईबीएम डीबी2)
  • PDO_INFORMIX (आईबीएम इनफॉर्मिक्स डायनेमिक सर्वर)
  • PDO_MYSQL (MySQL 3.x/4.x/5.x)
  • PDO_OCI (ओरेकल कॉल इंटरफेस)
  • PDO_ODBC (ODBC v3 (IBM DB2, unixODBC, और win32 ODBC))
  • PDO_PGSQL (पोस्टग्रेएसक्यूएल)
  • PDO_SQLITE (SQLite 3 और SQLite 2)
  • PDO_4D (डी)

जरूरी नहीं कि ये सभी ड्राइवर आपके सिस्टम पर उपलब्ध हों; यह पता लगाने का एक त्वरित तरीका है कि आपके पास कौन से ड्राइवर हैं:

print_r(PDO::getAvailableDrivers());

कनेक्ट करना

अलग-अलग डेटाबेस में कनेक्शन के तरीके थोड़े अलग हो सकते हैं। नीचे, आप कुछ सबसे लोकप्रिय डेटाबेस से कनेक्ट करने की विधि देख सकते हैं। आप देखेंगे कि डेटाबेस प्रकार के अलावा पहले तीन समान हैं—और फिर SQLite का अपना सिंटैक्स है।

try {
  # MS SQL Server and Sybase with PDO_DBLIB
  $DBH = new PDO("mssql:host=$host;dbname=$dbname", $user, $pass);
  $DBH = new PDO("sybase:host=$host;dbname=$dbname", $user, $pass);
 
  # MySQL with PDO_MYSQL
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
 
  # SQLite Database
  $DBH = new PDO("sqlite:my/database/path/database.db");
}
catch(PDOException $e) {
    echo $e->getMessage();
}

कृपया ट्राई/कैच ब्लॉक पर ध्यान दें। आपको अपने पीडीओ संचालन को हमेशा एक कोशिश/पकड़ में लपेटना चाहिए और अपवाद तंत्र का उपयोग करना चाहिए-इस पर शीघ्र ही और अधिक। आम तौर पर, आप केवल एक ही कनेक्शन बनाने जा रहे हैं- आपको सिंटैक्स दिखाने के लिए कई सूचीबद्ध हैं। $DBH 'डेटाबेस हैंडल' के लिए खड़ा है और इस पूरे ट्यूटोरियल में उपयोग किया जाएगा।

आप हैंडल को शून्य पर सेट करके किसी भी कनेक्शन को बंद कर सकते हैं।

# close the connection
$DBH = null;

आप PHP.net से डेटाबेस-विशिष्ट विकल्पों और/या अन्य डेटाबेस के लिए कनेक्शन स्ट्रिंग्स के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

अपवाद और पीडीओ

पीडीओ त्रुटियों को संभालने के लिए अपवादों का उपयोग कर सकता है, जिसका अर्थ है कि आप पीडीओ के साथ जो कुछ भी करते हैं उसे एक कोशिश/पकड़ ब्लॉक में लपेटा जाना चाहिए। आप अपने नए बनाए गए डेटाबेस हैंडल पर त्रुटि मोड विशेषता सेट करके पीडीओ को तीन त्रुटि मोड में से एक में बाध्य कर सकते हैं। यहाँ वाक्य रचना है:

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

कोई फर्क नहीं पड़ता कि आपने कौन सा त्रुटि मोड सेट किया है, कनेक्ट करने में त्रुटि हमेशा एक अपवाद उत्पन्न करेगी, और कनेक्शन बनाना हमेशा एक कोशिश/पकड़ ब्लॉक में निहित होना चाहिए।

PDO::ERRMODE_SILENT

यह डिफ़ॉल्ट त्रुटि मोड है। अगर आप इसे इस मोड में छोड़ देते हैं, तो आपको उस तरह की त्रुटियों की जांच करनी होगी, जिस तरह से आप शायद अभ्यस्त हैं, यदि आपने mysql का उपयोग किया है या mysqli एक्सटेंशन। अन्य दो विधियाँ DRY प्रोग्रामिंग के लिए अधिक उपयुक्त हैं।

PDO::ERRMODE_WARNING

यह मोड एक मानक PHP चेतावनी जारी करेगा और प्रोग्राम को निष्पादन जारी रखने की अनुमति देगा। यह डिबगिंग के लिए उपयोगी है।

PDO::ERRMODE_EXCEPTION

यह वह विधा है जिसे आप अधिकांश स्थितियों में चाहते हैं। यह एक अपवाद को सक्रिय करता है, जिससे आप त्रुटियों को इनायत से संभाल सकते हैं और डेटा छिपा सकते हैं जो किसी को आपके सिस्टम का फायदा उठाने में मदद कर सकता है। यहाँ अपवादों का लाभ उठाने का एक उदाहरण दिया गया है:

# connect to the database
try {
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
 
  # UH-OH! Typed DELECT instead of SELECT!
  $DBH->prepare('DELECT name FROM people');
}
catch(PDOException $e) {
    echo "I'm sorry, Dave. I'm afraid I can't do that.";
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}

चयन कथन में जानबूझकर त्रुटि है; यह एक अपवाद का कारण होगा। अपवाद लॉग फ़ाइल में त्रुटि का विवरण भेजता है और उपयोगकर्ता को एक दोस्ताना (या इतना अनुकूल नहीं) संदेश प्रदर्शित करता है।

सम्मिलित करें और अपडेट करें

नया डेटा सम्मिलित करना (या मौजूदा डेटा को अपडेट करना) अधिक सामान्य डेटाबेस संचालन में से एक है। PHP पीडीओ का उपयोग करना, यह सामान्य रूप से दो चरणों वाली प्रक्रिया है। इस खंड में शामिल सभी चीजें UPDATE . दोनों पर समान रूप से लागू होती हैं और INSERT संचालन।

यहां सबसे बुनियादी प्रकार के इंसर्ट का उदाहरण दिया गया है:

# STH means "Statement Handle"
$STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");
$STH->execute();

आप exec() . का उपयोग करके भी यही ऑपरेशन पूरा कर सकते हैं विधि, एक कम कॉल के साथ। ज्यादातर स्थितियों में, आप लंबी विधि का उपयोग करने जा रहे हैं ताकि आप तैयार किए गए बयानों का लाभ उठा सकें। यहां तक ​​​​कि अगर आप इसे केवल एक बार उपयोग करने जा रहे हैं, तो तैयार बयानों का उपयोग आपको SQL इंजेक्शन हमलों से बचाने में मदद करेगा।

तैयार विवरण

तैयार किए गए कथनों का उपयोग आपको SQL इंजेक्शन से बचाने में मदद करेगा।

एक तैयार कथन एक पूर्व-संकलित SQL कथन है जिसे सर्वर पर केवल डेटा भेजकर कई बार निष्पादित किया जा सकता है। इसमें प्लेसहोल्डर्स में उपयोग किए गए डेटा को SQL इंजेक्शन हमलों से स्वचालित रूप से सुरक्षित बनाने का अतिरिक्त लाभ है।

आप अपने SQL में प्लेसहोल्डर्स को शामिल करके तैयार स्टेटमेंट का उपयोग करते हैं। यहां तीन उदाहरण दिए गए हैं:एक बिना प्लेसहोल्डर के, एक बिना नाम वाले प्लेसहोल्डर्स के, और दूसरा नामित प्लेसहोल्डर्स के साथ।

# no placeholders - ripe for SQL Injection!
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");
 
# unnamed placeholders
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");
 
# named placeholders
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");

आप पहली विधि से बचना चाहते हैं; यह यहाँ तुलना के लिए है। नामित या अनाम प्लेसहोल्डर्स का उपयोग करने का विकल्प प्रभावित करेगा कि आप उन कथनों के लिए डेटा कैसे सेट करते हैं।

अनाम प्लेसहोल्डर

# assign variables to each place holder, indexed 1-3
$STH->bindParam(1, $name);
$STH->bindParam(2, $addr);
$STH->bindParam(3, $city);
 
# insert one row
$name = "Daniel"
$addr = "1 Wicked Way";
$city = "Arlington Heights";
$STH->execute();
 
# insert another row with different values
$name = "Steve"
$addr = "5 Circle Drive";
$city = "Schaumburg";
$STH->execute();

यहां दो चरण हैं। सबसे पहले, हम विभिन्न प्लेसहोल्डर्स को वैरिएबल असाइन करते हैं (लाइन 2–4)। फिर, हम उन प्लेसहोल्डर्स को मान असाइन करते हैं और स्टेटमेंट निष्पादित करते हैं। डेटा का दूसरा सेट भेजने के लिए, बस उन वेरिएबल्स के मानों को बदलें और स्टेटमेंट को फिर से निष्पादित करें।

क्या यह बहुत सारे मापदंडों वाले बयानों के लिए थोड़ा बोझिल लगता है? यह है। हालांकि, यदि आपका डेटा किसी सरणी में संग्रहीत है, तो एक आसान शॉर्टकट है:

# the data we want to insert
$data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');
 
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");
$STH->execute($data);

यह आसान है!

सरणी में डेटा क्रम में प्लेसहोल्डर पर लागू होता है। $data[0] पहले प्लेसहोल्डर में जाता है, $data[1] दूसरा, आदि। हालांकि, यदि आपकी सरणी अनुक्रमणिका क्रम में नहीं हैं, तो यह ठीक से काम नहीं करेगी, और आपको सरणी को फिर से अनुक्रमित करने की आवश्यकता होगी।

नामांकित प्लेसहोल्डर

आप शायद वाक्य रचना का अनुमान लगा सकते हैं, लेकिन यहाँ एक उदाहरण है:

# the first argument is the named placeholder name - notice named
# placeholders always start with a colon.
$STH->bindParam(':name', $name);

आप यहां शॉर्टकट का भी उपयोग कर सकते हैं, लेकिन यह सहयोगी सरणियों के साथ काम करता है। यहां एक उदाहरण दिया गया है:

# the data we want to insert
$data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );
 
# the shortcut!
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
$STH->execute($data);

आपके सरणी की कुंजियों को कोलन से शुरू करने की आवश्यकता नहीं है, लेकिन अन्यथा नामित प्लेसहोल्डर से मेल खाने की आवश्यकता है। यदि आपके पास सरणियों की एक सरणी है, तो आप उन पर पुनरावृति कर सकते हैं और बस execute को कॉल कर सकते हैं डेटा की प्रत्येक सरणी के साथ।

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

# a simple object
class person {
    public $name;
    public $addr;
    public $city;
 
    function __construct($n,$a,$c) {
        $this->name = $n;
        $this->addr = $a;
        $this->city = $c;
    }
    # etc ...
}
 
$cathy = new person('Cathy','9 Dark and Twisty','Cardiff');
 
# here's the fun part:
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
$STH->execute((array)$cathy);

ऑब्जेक्ट को execute . में किसी ऐरे में कास्ट करना इसका मतलब है कि गुणों को सरणी कुंजियों के रूप में माना जाता है।

डेटा चुनना

डेटा ->fetch() . के ज़रिए प्राप्त किया जाता है , आपके स्टेटमेंट हैंडल की एक विधि। फ़ेच को कॉल करने से पहले, पीडीओ को यह बताना सबसे अच्छा है कि आप डेटा को कैसे प्राप्त करना चाहते हैं। आपके पास निम्नलिखित विकल्प हैं:

  • PDO::FETCH_ASSOC : स्तंभ नाम से अनुक्रमित एक सरणी देता है।
  • PDO::FETCH_BOTH (डिफ़ॉल्ट): स्तंभ नाम और संख्या दोनों द्वारा अनुक्रमित एक सरणी देता है।
  • PDO::FETCH_BOUND : ->bindColumn() . के साथ सेट किए गए वेरिएबल को आपके कॉलम के मान असाइन करता है विधि।
  • PDO::FETCH_CLASS : नामित वर्ग के गुणों के लिए आपके कॉलम के मान निर्दिष्ट करता है। यदि मेल खाने वाले गुण मौजूद नहीं हैं तो यह गुण बना देगा।
  • PDO::FETCH_INTO : नामित वर्ग के मौजूदा उदाहरण को अपडेट करता है।
  • PDO::FETCH_LAZY :जोड़ती है PDO::FETCH_BOTH /PDO::FETCH_OBJ , ऑब्जेक्ट वेरिएबल नाम बनाना जैसे उनका उपयोग किया जाता है।
  • PDO::FETCH_NUM : स्तंभ संख्या द्वारा अनुक्रमित एक सरणी देता है।
  • PDO::FETCH_OBJ : संपत्ति नामों के साथ एक अज्ञात वस्तु लौटाता है जो कॉलम नामों से मेल खाता है।

वास्तव में, तीन ऐसे हैं जो अधिकतर स्थितियों को कवर करेंगे: FETCH_ASSOCFETCH_CLASS , और FETCH_OBJ . फ़ेच विधि सेट करने के लिए, निम्न सिंटैक्स का उपयोग किया जाता है:

$STH->setFetchMode(PDO::FETCH_ASSOC);

आप फ़ेच प्रकार को सीधे ->fetch() . में भी सेट कर सकते हैं विधि कॉल।

FETCH_ASSOC

यह लाने का प्रकार कॉलम नाम से अनुक्रमित एक सहयोगी सरणी बनाता है। यह उन लोगों के लिए काफी परिचित होना चाहिए जिन्होंने mysql/mysqli एक्सटेंशन का उपयोग किया है। इस विधि से डेटा चुनने का एक उदाहरण यहां दिया गया है:

# using the shortcut ->query() method here since there are no variable
# values in the select statement.
$STH = $DBH->query('SELECT name, addr, city from folks');
 
# setting the fetch mode
$STH->setFetchMode(PDO::FETCH_ASSOC);
 
while($row = $STH->fetch()) {
    echo $row['name'] . "\n";
    echo $row['addr'] . "\n";
    echo $row['city'] . "\n";
}

जबकि लूप पूरा होने तक एक समय में एक पंक्ति के परिणाम सेट के माध्यम से जाना जारी रखेगा।

FETCH_OBJ

यह फ़ेच प्रकार फ़ेच किए गए डेटा की प्रत्येक पंक्ति के लिए एसटीडी वर्ग का एक ऑब्जेक्ट बनाता है। यहां एक उदाहरण दिया गया है:

# creating the statement
$STH = $DBH->query('SELECT name, addr, city from folks');
 
# setting the fetch mode
$STH->setFetchMode(PDO::FETCH_OBJ);
 
# showing the results
while($row = $STH->fetch()) {
    echo $row->name . "\n";
    echo $row->addr . "\n";
    echo $row->city . "\n";
}

FETCH_CLASS

<ब्लॉकक्वॉट>

आपके ऑब्जेक्ट के गुण कंस्ट्रक्टर को कॉल करने से पहले सेट किए जाते हैं। यह महत्वपूर्ण है।

यह फ़ेच विधि आपको डेटा को सीधे अपनी पसंद के वर्ग में लाने की अनुमति देती है। जब आप FETCH_CLASS . का उपयोग करते हैं , आपके ऑब्जेक्ट के गुण सेट हैं BEFORE कंस्ट्रक्टर कहा जाता है। इसे फिर से पढ़ें-यह महत्वपूर्ण है। यदि कॉलम नामों से मेल खाने वाले गुण मौजूद नहीं हैं, तो वे गुण आपके लिए (सार्वजनिक रूप में) बनाए जाएंगे।

इसका मतलब यह है कि यदि आपके डेटा को डेटाबेस से बाहर आने के बाद किसी भी परिवर्तन की आवश्यकता है, तो यह आपके ऑब्जेक्ट द्वारा स्वचालित रूप से किया जा सकता है क्योंकि प्रत्येक ऑब्जेक्ट बनाया जाता है।

एक उदाहरण के रूप में, ऐसी स्थिति की कल्पना करें जहां प्रत्येक रिकॉर्ड के लिए पते को आंशिक रूप से अस्पष्ट करने की आवश्यकता हो। हम कंस्ट्रक्टर में उस संपत्ति पर काम करके ऐसा कर सकते हैं। यहां एक उदाहरण दिया गया है:

class secret_person {
    public $name;
    public $addr;
    public $city;
    public $other_data;
 
    function __construct($other = '') {
        $this->address = preg_replace('/[a-z]/', 'x', $this->address);
        $this->other_data = $other;
    }
}

जैसे ही डेटा इस वर्ग में लाया जाता है, पते में उसका निचला अक्षर होता है a-z अक्षरों को x . अक्षर से बदल दिया गया है . अब, कक्षा का उपयोग करना और उस डेटा परिवर्तन का होना पूरी तरह से पारदर्शी है:

$STH = $DBH->query('SELECT name, addr, city from folks');
$STH->setFetchMode(PDO::FETCH_CLASS, 'secret_person');
 
while($obj = $STH->fetch()) {
    echo $obj->addr;
}

यदि पता '5 रोज़बड' था, तो आपको अपने आउटपुट के रूप में '5 Rxxxxxx' दिखाई देगा। बेशक, ऐसी स्थितियाँ हो सकती हैं जहाँ आप चाहते हैं कि कंस्ट्रक्टर को डेटा असाइन करने से पहले बुलाया जाए। पीडीओ ने आपको इसके लिए भी कवर किया है।

$STH->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'secret_person');

अब, जब आप पिछले उदाहरण को इस फ़ेच मोड के साथ दोहराते हैं (PDO::FETCH_PROPS_LATE ), पता नहीं होगा अस्पष्ट हो, क्योंकि कंस्ट्रक्टर को बुलाया गया था और गुण असाइन किए गए थे।

अंत में, यदि आपको वास्तव में आवश्यकता है, तो आप पीडीओ के साथ वस्तुओं में डेटा लाते समय कंस्ट्रक्टर को तर्क दे सकते हैं:

$STH->setFetchMode(PDO::FETCH_CLASS, 'secret_person', array('stuff'));

यदि आपको प्रत्येक ऑब्जेक्ट के लिए कंस्ट्रक्टर को अलग-अलग डेटा पास करने की आवश्यकता है, तो आप fetch के अंदर फ़ेच मोड सेट कर सकते हैं विधि:

$i = 0;
while($rowObj =  $STH->fetch(PDO::FETCH_CLASS, 'secret_person', array($i))) {
    // do stuff
    $i++
}

कुछ अन्य उपयोगी तरीके

हालांकि यह पीडीओ में सब कुछ कवर करने के लिए नहीं है (यह एक बहुत बड़ा विस्तार है!), कुछ और तरीके हैं जिन्हें आप पीडीओ के साथ बुनियादी चीजें करने के लिए जानना चाहेंगे।

$DBH->lastInsertId();

->lastInsertId() विधि को हमेशा डेटाबेस हैंडल पर कॉल किया जाता है, स्टेटमेंट हैंडल पर नहीं, और उस कनेक्शन द्वारा अंतिम सम्मिलित पंक्ति की ऑटो-इंक्रीमेंटेड आईडी लौटाएगा।

$DBH->exec('DELETE FROM folks WHERE 1');
$DBH->exec("SET time_zone = '-8:00'");

->exec() विधि का उपयोग उन कार्यों के लिए किया जाता है जो प्रभावित पंक्तियों के अलावा अन्य डेटा वापस नहीं कर सकते हैं। उपरोक्त निष्पादन विधि का उपयोग करने के दो उदाहरण हैं।

$safe = $DBH->quote($unsafe);

->quote() विधि स्ट्रिंग्स को उद्धृत करती है ताकि वे प्रश्नों में उपयोग करने के लिए सुरक्षित हों। यदि आप तैयार कथनों का उपयोग नहीं कर रहे हैं तो यह आपकी वापसी है।

$rows_affected = $STH->rowCount();

->rowCount() विधि एक पूर्णांक देता है जो किसी ऑपरेशन से प्रभावित पंक्तियों की संख्या दर्शाता है। पीडीओ के कम से कम एक ज्ञात संस्करण में, विधि चुनिंदा कथनों के साथ काम नहीं कर रही थी। हालांकि, यह PHP 5.1.6 और इसके बाद के संस्करण में ठीक से काम करता है।

यदि आपको यह समस्या हो रही है और आप PHP को अपग्रेड नहीं कर सकते हैं, तो आप निम्न के साथ पंक्तियों की संख्या प्राप्त कर सकते हैं:

$sql = "SELECT COUNT(*) FROM folks";
if ($STH = $DBH->query($sql)) {
    # check the row count
    if ($STH->fetchColumn() > 0) {
 
    # issue a real select here, because there's data!
    }
    else {
        echo "No rows matched the query.";
    }
}

CodeCanyon से PHP CRUD जेनरेटर

आप CodeCanyon से PHP CRUD जनरेटर ढूंढकर और अपनी परियोजनाओं में इसका उपयोग करके अपना समय बचा सकते हैं। यहां पांच सबसे लोकप्रिय डाउनलोड हैं जिनका आप अभी उपयोग करना शुरू कर सकते हैं।

<एच3>1. Laravel बहुउद्देश्यीय अनुप्रयोग:Sximo 6

Sximo 6 बिल्डर आसपास के सबसे लोकप्रिय फ्रेमवर्क पर आधारित है। इसे 2021 के लिए एक नया अपडेट भी प्राप्त हुआ है, जिससे इसे उपयोग करना आसान हो गया है और यह यथासंभव सुविधा संपन्न है। उनमें से कुछ विशेषताओं में शामिल हैं:

  • डेटाबेस तालिका प्रबंधन
  • फ्रंट-एंड और बैक-एंड टेम्प्लेट
  • मॉड्यूल MySQL संपादक
  • एकाधिक चित्र और फ़ाइल अपलोड समर्थन

यदि आप सीआरयूडी पीएचपी टेम्पलेट के साथ समय बचाना चाहते हैं तो इसे आजमाएं।

<एच3>2. पीडीओ क्रूड:फॉर्म बिल्डर और डेटाबेस प्रबंधन

यहाँ एक और शक्तिशाली CRUD PHP जनरेटर है। यह PHP पीडीओ कोड टेम्पलेट डेटाबेस प्रबंधन को अच्छी तरह से करता है। लेकिन यह सब कुछ नहीं करता है। आप सीधे अपने डेटाबेस टेबल से मददगार फॉर्म बनाने के लिए पीडीओ सीआरयूडी का भी उपयोग कर सकते हैं। यह एक उपयोगी विशेषता है जो कई अन्य विकल्पों में नहीं है।

<एच3>3. सिकूल:पेज, फॉर्म, रेस्ट एपीआई और सीआरयूडी जेनरेटर

सिकूल एक और बहुउद्देश्यीय बिल्डर है जो देखने लायक है। यह न केवल एक CRUD बिल्डर की पेशकश करता है, बल्कि इसमें एक:

. भी है
  • पेज बिल्डर
  • फ़ॉर्म निर्माता
  • बाकी एपीआई बिल्डर

इन सुविधाओं के अलावा, आप सिकूल में एक्सटेंशन भी जोड़ सकते हैं और इसकी थीम को आसानी से कस्टमाइज़ कर सकते हैं।

<एच3>4. पीएचपी सीआरयूडी जेनरेटर

आसान व्यवस्थापक पैनल बिल्डर? जाँच करना। नेविगेट करने में आसान इंटरफ़ेस? जाँच करना। गहराई से डेटाबेस विश्लेषण? एक और चेक। इस PHP CRUD जनरेटर में वह सब कुछ है जो आपको बेहतरीन डैशबोर्ड बनाने और अपना डेटा स्टोर करने के लिए चाहिए। विभिन्न उपयोगकर्ता प्रमाणीकरण और अधिकार प्रबंधन सुविधाओं के साथ, यह पीडीओ पीएचपी टेम्पलेट देखने लायक है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इंडेक्स डेटाबेस के प्रदर्शन को कैसे प्रभावित करते हैं?

  2. 7 तरीके Microsoft Access आपके व्यवसाय में मदद कर सकता है

  3. Microsoft Access में किसी प्रपत्र में शीर्ष लेख और पाद लेख कैसे जोड़ें?

  4. एक्सेस में परिकलित फ़ील्ड कैसे बनाएं

  5. VBA के लिए पठनीय कोड लिखना - कोशिश करें* पैटर्न