MySQL या MariaDB डेटाबेस तैयार करें

MySQL या MariaDB डेटाबेस तैयार करें

MySQL या MariaDB डेटाबेस तैयार करें

IoT वेब सर्वरHTTP पोस्ट IoT वेब सर्वरMySQL डेटाबेस. IoT वेब सर्वरPHP भाषा IoT वेब सर्वर

डेटाबेस सर्वर कॉन्फ़िगर करें

एक बार सेवाओं का सेट स्थापित हो जाए दीपक, WAMP, MAMP o XAMPP जैसा कि श्रृंखला के पहले लेख में बताया गया है या मशीन पर स्थापित करने के बाद जो सर्वर के रूप में कार्य करेगा, संबंधित सेवाओं को लागू करने वाले अनुप्रयोगों का योग, डेटाबेस सर्वर कॉन्फ़िगरेशन के कुछ पहलुओं को समायोजित करना आवश्यक है MySQL साथ ही डेटाबेस और तालिकाएँ बनाना जिनका उपयोग इंटरनेट ऑफ़ थिंग्स उपकरणों से डेटा संग्रहीत करने के लिए वेब सर्वर पर किया जाएगा।

यदि सार्वजनिक सर्वर का उपयोग किया जाता है, तो ऑपरेशन में सुरक्षा को सुदृढ़ करने के लिए प्रदाता ने निश्चित रूप से उपयोगकर्ता और डेटाबेस के "वास्तविक" कॉन्फ़िगरेशन के बीच मध्यस्थता करने के लिए कुछ प्रकार के पैनल प्रदान किए होंगे। यदि हां, तो आपको इस प्रदाता द्वारा दिए जाने वाले निर्देशों का संदर्भ लेना होगा। किसी तीसरे पक्ष की सुविधाओं में होस्ट किए गए वास्तविक या वर्चुअल सर्वर के मामले में, जब प्रदाता इसे प्रबंधित करता है तो एक तुलनीय स्थिति उत्पन्न हो सकती है; यदि एक गैर-प्रबंधित सर्वर अनुबंधित किया गया है (प्रदाता द्वारा, उपयोगकर्ता द्वारा प्रबंधित), तो निम्नलिखित जानकारी लागू होगी।

चूंकि महत्वपूर्ण बात उन निर्देशों को जानना है जो डेटाबेस प्रबंधक को दिए जाने चाहिए और यह समझा जाता है कि इसका उपयोग इंटरनेट ऑफ थिंग्स के लिए उपकरणों का समर्थन करने के साधन के रूप में किया जा रहा है, जो परियोजना का उद्देश्य होगा, यह हो सकता है कंसोल का उपयोग करने के लिए पर्याप्त है क्योंकि डेटाबेस सर्वर पर काम कभी-कभार ही होगा। यदि प्रबंधन कार्यभार बढ़ना शुरू हो जाता है, तो यह इसके लायक हो सकता है, क्योंकि सर्वर पर ही प्रबंधक का उपयोग करना अधिक सुविधाजनक है, जैसे कि लोकप्रिय phpMyAdmin (एक वेब ब्राउज़र से) या स्थानीय रूप से, हालांकि डेटाबेस सर्वर तक पहुंच, जैसे कि एक प्रशासक के साथ MySQL कार्यक्षेत्र जिससे एडवांस में प्रदर्शन किया जा सके जीयूआई जिन ऑपरेशनों की व्याख्या की जाएगी और कई अन्य जो इस लेख के बाहर हैं और जो एक पूरी श्रृंखला के लायक हैं।

MySQL वर्कबेंच एडमिन पैनल

इसके अलावा कमोबेश स्वचालित संचालन भी किया जा सकता है MySQL कार्यक्षेत्र सर्वर, डेटाबेस या तालिकाओं पर पूर्ण स्क्रिप्ट या स्वतंत्र कमांड लिखकर और निष्पादित करके "मैन्युअल रूप से" कार्य करना भी संभव है एसक्यूएल. टूल के समान ही MySQL कार्यक्षेत्र, एसक्यूएल एक अलग अध्याय की आवश्यकता है और जिसे गहराई से जानना आवश्यक होगा जब IoT वेब कार्य के जिस हिस्से पर अधिक गंभीरता से ध्यान दिया जाता है बैकेंड यहां बताया गया है।

MySQL वर्कबेंच SQL क्वेरी संपादक

किसी भी स्थिति में, और निश्चित रूप से संसाधित किए जा रहे IoT डेटाबेस के आवश्यक कॉन्फ़िगरेशन को हल करने के लिए, कंसोल का उपयोग किया जा सकता है।

रूट, मुख्य MySQL व्यवस्थापक को कॉन्फ़िगर करें

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

सेवाओं के सेट या सर्वर की स्थापना प्रक्रिया पर ध्यान देना महत्वपूर्ण है MySQL, अपनाई गई प्रक्रिया पर निर्भर करता है, क्योंकि, कई मामलों में, इंस्टॉलर स्वयं इस चरण और अन्य को पूरा करने का प्रभारी होगा और जब आप कॉन्फ़िगरेशन को संशोधित करना चाहते हैं, तब तक उन्हें दोहराना आवश्यक नहीं होगा।

इन कार्यों को करने के लिए, आप आमतौर पर कंसोल के साथ काम करते हैं। MySQL प्रशासक के रूप में. इस मोड तक पहुंचने के लिए, कमांड का उपयोग करें mysql -u root -p o sudo mysql -u root यदि पहली बार उपयोग किया गया है और इंस्टॉलेशन के दौरान उपयोगकर्ता को कॉन्फ़िगर नहीं किया गया है root

कंसोल से MySQL रूट उपयोगकर्ता को कॉन्फ़िगर करना

आदेश में mysql -u root -p विकल्प के साथ दर्शाया गया है -u उपयोगकर्ता नाम (root) और विकल्प के साथ -p (पासवर्ड) कंसोल तक पहुंचने पर कुंजी का अनुरोध किया जाना चाहिए MySQL. सिस्टम कंसोल पर लौटने के लिए आप कमांड का उपयोग कर सकते हैं quit बाहर जाने के लिए

जैसा कि कंसोल छोड़ने से पहले ऊपर स्क्रीनशॉट में देखा गया है MySQL, उपयोगकर्ता के विशेषाधिकार सेट करने के लिए root कमांड का उपयोग किया गया है:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;
जिसमें:

  • सभी विशेषाधिकार दिए गए हैं GRANT ALL PRIVILEGES
  • सभी डेटाबेस में सभी तालिकाओं में ON *.*
  • प्रयोगकर्ता के लिए root सर्वर चलाने वाली मशीन से एक्सेस करना MySQL TO 'root'@'localhost'
  • पासवर्ड के रूप में 1234 का उपयोग करना IDENTIFIED BY '1234'
  • अन्य उपयोगकर्ताओं को अधिकृत करने की अनुमति के साथ WITH GRANT OPTION

डेटाबेस को दूरस्थ रूप से प्रबंधित करने के लिए, अन्य स्थानों से संबंधित उपयोगकर्ता को विशेषाधिकार दिए जाने चाहिए। पिछले उदाहरण में, इसकी अनुमति थी root उस मशीन से एक्सेस किया गया जिस पर डेटाबेस सर्वर चल रहा है (localhost) के साथ 'root'@'localhost', यदि उपयोग किया जाता है 'root'@'%' किसी भी मशीन से प्रवेश की अनुमति होगी.

यदि आपके पास सिस्टम पर व्यवस्थापकीय विशेषाधिकार हैं, तो आप उपयोगकर्ता पासवर्ड को पुनः स्थापित कर सकते हैं root de MySQL. ऐसा करने के लिए, सेवा को रोकना आवश्यक है (mysql o mysqld, वितरण के आधार पर), इसे बिना कुंजी के बूट करें, नई कुंजी सेट करें root और इसे पुनः आरंभ करें. बिना पासवर्ड के एक्सेस करके ऊपर वर्णित विशेषाधिकार देना भी संभव है।

  • सेवा बंद करो sudo /etc/init.d/mysql stop
  • लांच MySQL बिना चाबी के और कंसोल को अनलॉक करें sudo mysqld_safe --skip-grant-tables &
  • के रूप में पहुंचेंroot» mysql -u root
  • पासवर्ड बदलें:
    • डेटाबेस तक पहुंचें «mysql»: USE mysql;
    • के लिए आवंटित "root» कुंजी "1234": UPDATE user SET authentication_string=PASSWORD("1234") WHERE user="root";
    • नए विशेषाधिकार लागू करें: FLUSH PRIVILEGES;
    • निकास कंसोल mysql और सिस्टम पर वापस लौटें: quit
  • सेवा पुनरारंभ करें sudo /etc/init.d/mysql restart

दूरस्थ डेटाबेस पहुंच कॉन्फ़िगर करें

सुरक्षा कारणों से, डेटाबेस प्रबंधक का प्रारंभिक कॉन्फ़िगरेशन MySQL रिमोट एक्सेस की अनुमति नहीं देता है, इसे बदलने के लिए कॉन्फ़िगरेशन दस्तावेज़ को सामान्य रूप से संपादित करना आवश्यक है my.cnf, जो आमतौर पर मार्ग पर पाया जाता है /etc/mysql.

अगर इस्तेमाल किया जाए MariaDB, जो अब "स्वतंत्र" संस्करण है MySQL, निश्चित रूप से my.cnf का लिंक होगा /etc/alternatives/my.cnf जो, बदले में, का उपयोग करके कॉन्फ़िगरेशन को लोड करेगा !includedir, मार्ग दस्तावेज़ों से /etc/mysql/mariadb.conf.d, शायद दस्तावेज़ से 50-server.cnf

दूरस्थ अनुरोधों पर ध्यान न देने के लिए डेटाबेस सर्वर जिस संसाधन का उपयोग करता है, उसमें केवल एक निश्चित स्थान से किए गए अनुरोधों को "सुनना" शामिल होता है। आईपी ​​एड्रेस जिसे पैरामीटर के मान के रूप में व्यक्त किया जाता है bind-address (जो क्लासिक की जगह लेता है skip-networking) जब पता है 127.0.0.1 (localhost) केवल स्थानीय मशीन के अनुरोधों पर ही ध्यान दिया जाता है। यदि साथ में टिप्पणी की गई है # या यदि मान है 0.0.0.0, हम किसी भी पते पर सेवा प्रदान करते हैं। बाहरी पहुंच की अनुमति देने के लिए, सबसे सुरक्षित बात यह इंगित करना है आईपी ​​एड्रेस (जो सार्वजनिक या निजी हो सकता है) जिस कंप्यूटर से इसे एक्सेस किया जाता है, आमतौर पर कुछ इस तरह bind-address = 192.168.1.74. आपके मामले में, यह उपकरण एक के रूप में कार्य कर सकता है सुरंग (के साथ पुनर्निर्देशन एसएसएच) या वॉकवे के रूप में (के साथ कोर आईपी टेबल) नेटवर्क के नियंत्रित क्षेत्र के बाहर सर्वर को उजागर करने से बचने के लिए।

My.cnf फ़ाइल को संपादित करके MySQL डेटाबेस कॉन्फ़िगरेशन (आदि mysql में)

ऊपर स्क्रीनशॉट में आप देख सकते हैं कि इसे एडिट किया गया है my.cnf कॉन्फ़िगरेशन के साथ MySQL आदेश का उपयोग करना sudo nano /etc/mysql/my.cnf. साथ काम करने के मामले में MariaDB सामान्य कॉन्फ़िगरेशन के साथ, ऑर्डर कुछ इस प्रकार होगा sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. जैसा कि ऊपर उल्लेख किया गया है, एक बार प्रशासनिक विशेषाधिकारों के साथ पहुंच हो जाने पर, ए जीयूआई जैसा MySQL कार्यक्षेत्र नियमित डेटाबेस प्रबंधन के लिए.

डेटाबेस बनाएँ

एक बार डेटाबेस सर्वर कॉन्फ़िगर हो जाने पर, IoT डेटा को संग्रहीत करने के लिए डेटाबेस और तालिकाएँ बनाई जा सकती हैं। ऐसा करने के लिए, आप कमांड का उपयोग कर सकते हैं एसक्यूएल कंसोल से या से जीयूआई एक मैनेजर का.

आदेश CREATE DATABASE temperaturas; "तापमान" डेटाबेस बनाता है। त्रुटियों से बचने के लिए, फॉर्म का उपयोग किया जा सकता है CREATE DATABASE IF NOT EXISTS base_datos_temperaturas; जो डेटाबेस "तापमान_डेटाबेस" तभी बनाएगा जब यह वर्तमान में मौजूद न हो।

तालिकाएँ बनाएँ

जैसा कि अलग-अलग डेटाबेस में एक ही नाम की तालिकाएँ हो सकती हैं, आप उनमें से किसी एक को डेटाबेस के नाम के पहले नाम के साथ जोड़कर और दोनों को एक अवधि से अलग करके संदर्भित कर सकते हैं, कुछ इस तरह base_datos.tabla इस अंकन को फ़ील्ड के नामों तक भी बढ़ाया जा सकता है base.tabla.campo

यदि किसी तालिका पर संचालन करते समय डेटाबेस का नाम छोड़ दिया जाता है (इस मामले में, इसे बनाते समय) तो यह माना जाता है कि अंतिम चयनित को संदर्भित किया गया है। किसी विशिष्ट को स्पष्ट रूप से चुनने के लिए, आप कमांड का उपयोग कर सकते हैं USE और अपना नाम बताएं USE base_datos_temperaturas;

डेटाबेस में तालिकाएँ बनाते समय, उसी ऑपरेशन में, उन्हें बनाने वाले फ़ील्ड की जानकारी आमतौर पर जोड़ी जाती है (हालाँकि उन्हें बाद में बदलना भी संभव है)। जैसा कि डेटाबेस के साथ किया जाता है, तालिका केवल तभी बनाई जा सकती है जब ऐसा होता है उपवाक्य जोड़ने का अस्तित्व नहीं है IF NOT EXISTS या इसके विपरीत, तालिका को बनाने से पहले उसे केवल तभी हटाना सुनिश्चित करें जब वह मौजूद हो DROP TABLE IF EXISTS valor_temperaturas;

तालिकाओं या डेटाबेस के नामों की अनुमति देने के लिए जो आदेशों या प्रक्रियाओं के साथ टकराव कर सकते हैं, गंभीर उच्चारण चिह्न, जिसे कभी-कभी उलटा अल्पविराम भी कहा जाता है, का उपयोग नाम को घेरने और आदेशों में टकराव या त्रुटियों से बचने के लिए किया जा सकता है। एसक्यूएल.

फ़ील्ड्स को परिभाषित करें

तालिका बनाते समय जोड़े गए फ़ील्ड को कोष्ठक में संलग्न करके और उनके द्वारा संग्रहीत डेटा के प्रकार को इंगित करके दर्शाया जाता है। आमतौर पर इंटरनेट ऑफ थिंग्स से जुड़े उपकरणों से जानकारी संग्रहीत करने के लिए डेटाबेस में उपयोग किए जाने वाले डेटा प्रकार पूर्णांक होते हैं (INT o BIGINT) दशमलव (DECIMAL, DOUBLE o FLOAT) समय की (DATE, TIME, DATETIME o TIMESTAMP) और पाठ (मुख्य रूप से VARCHAR हालाँकि ऐसे अन्य लोग भी हैं TEXT लेकिन उनका उपयोग IoT के लिए नहीं किया जाता है) डेटा प्रकार के बाद, और कोष्ठक में, डेटा की लंबाई और, यदि लागू हो, प्रारूप या परिशुद्धता जोड़ी जाती है।

जोड़कर AUTO_INCREMENT किसी फ़ील्ड की परिभाषा डेटाबेस प्रबंधक को इंगित करती है कि, यदि कुछ और नहीं दर्शाया गया है, तो एक नया रिकॉर्ड बनाते समय पिछले एक का मूल्य और संबंधित वृद्धि स्वचालित रूप से संग्रहीत की जानी चाहिए (जो सामान्य रूप से 1 है)। इसे आम तौर पर इसमें शामिल किया जाता है फ़ील्ड्स जिनका उपयोग रिकॉर्ड के संख्यात्मक सूचकांक के रूप में किया जाता है।

कोड NOT NULL इंगित करता है कि रिकॉर्ड में कोई फ़ील्ड खाली नहीं हो सकती, इसमें कुछ मान संग्रहीत होना चाहिए।

उपयोग करते समय DEFAULT किसी तालिका का फ़ील्ड बनाते समय उसे दर्शाया जाता है MySQL फ़ील्ड के लिए एक डिफ़ॉल्ट मान बशर्ते कि कोई नया रिकॉर्ड जोड़ते समय या उसे संशोधित करते समय, कोई अन्य मान स्पष्ट रूप से इंगित नहीं किया जाता है। इस मामले में IoT मानों की निगरानी के लिए अक्सर उपयोग किया जाने वाला डिफ़ॉल्ट मान है CURRENT_TIMESTAMP जो आपको नया रिकॉर्ड बनाते समय किसी फ़ील्ड में वर्तमान समय को स्वचालित रूप से रिकॉर्ड करने की अनुमति देता है, इसलिए समय में डेटा की स्वचालित रूप से पहचान की जाती है।

डेटाबेस के प्रदर्शन को अनुकूलित करने के लिए, तालिका फ़ील्ड की परिभाषा के अंत में उस फ़ील्ड को शामिल करना सुविधाजनक है जिसे क्लॉज के साथ इंडेक्स के रूप में उपयोग किया जाता है PRIMARY KEY (ID) आईडी को सूचकांक के रूप में चुना गया क्षेत्र है।

किसी तालिका की परिभाषा के अंत में आप उस डेटाबेस इंजन को इंगित कर सकते हैं जिसके साथ इसे पैरामीटर मान के रूप में प्रबंधित किया जाता है ENGINE प्रारूप के साथ ENGINE=InnoDB; किया जा रहा है InnoDB इस मामले में चुना गया इंजन।

SQL सत्र में डेटाबेस, टेबल बनाएं और फ़ील्ड कॉन्फ़िगर करें

निम्नलिखित उदाहरण में कोड न्यूनतम तालिका के साथ डेटाबेस बनाने के लिए आदेशों, उठाए जाने वाले कदमों को एक साथ लाता है।

डेटाबेस की बैकअप प्रतिलिपियाँ बनाएँ

एक बार जब सर्वर कॉन्फ़िगर हो जाता है और डेटाबेस और उसकी तालिकाएँ बन जाती हैं, तो सब कुछ IoT नोड्स द्वारा प्राप्त जानकारी को संग्रहीत करने के लिए तैयार हो जाएगा। हालाँकि लेखों की इस श्रृंखला के फोकस में रखरखाव शामिल नहीं है, एक महत्वपूर्ण प्रशासनिक मुद्दा है जिसे संबोधित करना महत्वपूर्ण है: बैकअप। सहित अधिकांश प्रबंधकों से phpMyAdmin y MySQL कार्यक्षेत्र, बैकअप प्रतियां बनाई और पुनर्स्थापित की जा सकती हैं लेकिन उन्हें एक स्क्रिप्ट में शामिल करना आम बात है जो उन्हें स्वचालित करती है (संभवतः कॉन्फ़िगरेशन और कई अन्य दस्तावेज़ों के साथ) इसलिए टूल का उपयोग करना अधिक सुविधाजनक है MySQLDump, एक क्लाइंट जो आमतौर पर पारंपरिक इंस्टॉलेशन का हिस्सा होता है MySQL, या कुछ वैकल्पिक जैसे MySQL डेटा डम्पर आदेश में क्या शामिल है? mydumper प्रतिलिपि बनाने के लिए और myloader इसे पुनर्स्थापित करने के लिए

MySQLDump

आदेश प्रारूप mysqldump यह बहुत आसान है, आपको बस उपयोगकर्ता नाम बताना होगा user, पासवर्ड password और वह डेटाबेस जिसे आप कॉपी करना चाहते हैं या --all-databases निम्नलिखित उदाहरण की तरह सभी डेटाबेस का बैकअप लेने के लिए:

mysqldump --opt --user=pelaez --password=1234 --all-databases > copia.sql

पिछला उदाहरण दस्तावेज़ तैयार करता है copia.sql जिसमें आदेश शामिल हैं एसक्यूएल (अर्थात पाठ) सभी डेटाबेस के पुनर्निर्माण के लिए आवश्यक है। जब टेक्स्ट प्रारूप में सहेजा जाता है, तो प्रतिलिपि आवश्यकता से अधिक जगह ले लेती है, यही कारण है कि इसे आमतौर पर उस डिवाइस पर जगह बचाने के लिए संपीड़ित किया जाता है जिस पर इसे संग्रहीत किया जाता है।

उदाहरण कमांड के साथ उत्पन्न बैकअप को बहाल किया जा सकता है यदि ऑपरेशन निष्पादित करने वाले नीचे दिए गए कमांड में त्रुटि के कारण जानकारी खो गई थी एसक्यूएल दस्तावेज़ का copia.sql

mysql --user=pelaez --password=1234 < copia.sql

MySQL डेटा डम्पर

हालाँकि पिछले ऑपरेशन पर्याप्त होंगे, लेकिन इसका उपयोग करना बहुत आम है MySQL डेटा डम्पर, पहले से ही अपने प्रदर्शन के लिए लगभग एक मानक है, हालांकि यह इसमें शामिल बुनियादी उपकरणों का हिस्सा नहीं है MySQL

के विकल्प निम्नलिखित हैं mydumper सबसे अधिक उपयोग किया जाता है, तार्किक रूप से, इसे एक ही कमांड के हिस्से के रूप में लिखा जाना चाहिए, रिक्त स्थान से अलग किया जाना चाहिए, हालांकि इस पाठ में उन्हें पढ़ने की सुविधा के लिए पंक्तियों में अलग किया गया है:

--host polaridad.es "polaridad.es" डेटाबेस सर्वर का नाम है
--port 3306 "3306" वह पोर्ट नंबर है जिस पर सर्वर सुनता है (डिफ़ॉल्ट रूप से यह 3306 है)
--user pelaez "पेलेज़" उस उपयोगकर्ता का नाम है जिसके साथ डेटाबेस तक पहुंच है
--password 1234 "1234" उस उपयोगकर्ता का पासवर्ड है जिसके साथ डेटाबेस एक्सेस किया जाता है
--database temperaturas "तापमान" बैकअप किए जा रहे डेटाबेस का नाम है
--no-locks कॉपी के दौरान डेटाबेस को लॉक न करें (डिफ़ॉल्ट रूप से यह लॉक होता है)
--build-empty-files खाली तालिकाओं की भी प्रतिलिपि बनाएँ
--compress-input इनपुट संपीड़ित करें
--compress आउटपुट को संपीड़ित करें (परिणामस्वरूप बैकअप)

से प्राप्त बैकअप को पुनर्स्थापित करने के लिए mydumper इसका उपयोग किया जाता है myloader जिसका उपयोग मुख्य रूप से निम्नलिखित विकल्पों के साथ किया जाता है, जिन्हें रिक्त स्थान से अलग किए गए समान क्रम में शामिल किया जाना चाहिए:

--host polaridad.es "polaridad.es" डेटाबेस सर्वर का नाम है
--port 3306 "3306" वह पोर्ट नंबर है जिस पर सर्वर सुनता है (डिफ़ॉल्ट रूप से यह 3306 है)
--user pelaez "पेलेज़" उस उपयोगकर्ता का नाम है जिसके साथ डेटाबेस तक पहुंच है
--password 1234 "1234" उस उपयोगकर्ता का पासवर्ड है जिसके साथ डेटाबेस एक्सेस किया जाता है
--directory=copia_iot "iot_copy" वह फ़ोल्डर है जिसमें उत्पन्न प्रतिलिपि स्थित है mydumper
--overwrite-tables तालिकाओं को अधिलेखित करें भले ही वे पहले से मौजूद हों
--verbose 3 "3" प्रक्रिया की जानकारी की डिग्री है (उच्चतर, अधिक संदेश)
-C डेटा स्ट्रीम पर संपीड़न का उपयोग करें

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

टिप्पणी पोस्ट

आप चूक गए होंगे