क्या मैं PHP में MySQL API मिला सकता हूँ?


106

मैंने नेट खोजा है और अब तक जो मैंने देखा है वह यह है कि आप उपयोग कर सकते हैं mysql_और mysqli_साथ में अर्थ:

<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");

if( mysqli_connect_errno( $con ) ) {
    echo "failed to connect";
}else{
    echo "connected";
}
mysql_close($con);
echo "Done";
?>

या

<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
    echo "failed to connect";
}else{
    echo "connected";
}
mysqli_close($con);
echo "Done";
?>

मान्य हैं, लेकिन जब मैं इस कोड का उपयोग करता हूं तो मुझे जो मिलता है:

Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done

पहले और उसी को छोड़कर mysqli_close()। दूसरे के लिए।

समस्या क्या है? क्या मैं उपयोग नहीं कर सकता mysql_और mysqliसाथ में? या यह सामान्य है? क्या मैं जांच कर सकता हूं कि क्या कनेक्शन बिल्कुल वैध हैं? ( if(mysq...))


5
mysql को हटा दिया गया है, यह केवल समझ में आता है कि वे एक साथ काम नहीं करेंगे। आप ऐसा करने की कोशिश क्यों कर रहे हैं ..?
स्टर्लिंग आर्चर

7
आपको mysql_*कार्यों का पूरी तरह से उपयोग करने से बचना चाहिए । वे त्रुटि-रहित और असुरक्षित हैं, और उन्हें जल्द ही PHP से हटा दिया जाएगा (वे इस समय पदावनत के रूप में चिह्नित हैं)। [यह महान उत्तर] [०] और अधिक विस्तार से बताते हैं कि वे बुरे क्यों हैं। [०]: stackoverflow.com/a/12860046/1055295
आंद्रेई बेरासन

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

1
यह कोई अंधविश्वास नहीं है। बेशक आप mysqli_*कार्यों के साथ बुरा कोड और mysql_*लोगों के साथ अच्छा कोड लिख सकते हैं। लेकिन बाद की श्रेणी को पदावनत के रूप में चिह्नित किया गया है क्योंकि यह कार्यों का अवर सेट है, ओओ-शैली के आह्वान या यहां तक ​​कि तैयार किए गए बयानों का समर्थन करने में सक्षम नहीं है (केवल दो उदाहरणों को नाम देने के लिए)। एक ही काम करने के लिए दो उपकरणों का विकल्प दिया गया है, जिनमें से एक स्पष्ट रूप से लंबे समय में बेहतर है और अधिक लचीला है, सही उत्तर स्पष्ट नहीं है?
आंद्रेई ब्रासन

1
बिलकूल नही। हालाँकि, हटाए गए कार्यक्षमता और सक्रिय रूप से समर्थित के बीच चयन करने का विकल्प दिया गया है, कहते हैं, अपने स्वयं के अमूर्त को रोल करते हुए, पुराने कार्यों का उपयोग क्यों करें?
आंद्रेई ब्रासन

जवाबों:


65

नहीं, आप उपयोग नहीं कर सकते हैं mysqlऔर mysqliएक साथ। वे अलग-अलग एपीआई हैं और उनके द्वारा बनाए गए संसाधन एक दूसरे के साथ असंगत हैं।

एक है mysqli_close, हालांकि।


यद्यपि आपको कभी भी कनेक्शन बंद करने की आवश्यकता नहीं होनी चाहिए; जब वे अब कहीं भी संदर्भित नहीं होते हैं तो वस्तुएं खुद को साफ करती हैं। (यह निश्चित नहीं है कि सादे पुराने संसाधन ऐसा करते हैं, लेकिन वस्तुएं वास्तव में RAII का लाभ नहीं ले सकती हैं, न कि महत्वहीन डिग्री के लिए।)
cHao

@ CH केवल इतना ही नहीं, बल्कि स्क्रिप्ट के बाहर निकलते ही PHP किसी भी खुले MySQL कनेक्शन को बंद कर देगा
धमाका गोलियां

1
लेकिन हमेशा नहीं, मेरे अनुभव के लिए, इसलिए हम हमेशा फ़ाइल के नीचे एक करीब रखते हैं।
RationalRabbit

14

संदर्भ के साथ सभी तीन MYSQL API के बारे में सामान्य उत्तर देने के लिए बस:

आप तीन (के किसी भी मिश्रण नहीं कर सकते mysql_*, mysqli_*, PDOएक साथ PHP से) MYSQL एपीआई, यह सिर्फ काम नहीं करता है। यह भी में है मैनुअल पूछे जाने वाले प्रश्न :

यह है एक्सटेंशन मिश्रण के लिए संभव नहीं । इसलिए, उदाहरण के लिए, एक mysqli कनेक्शन को PDO_MySQL या ext / mysql पास करने से काम नहीं चलेगा


आपको कनेक्शन से लेकर क्वेरी तक समान MySQL API और इससे संबंधित कार्यों का उपयोग करने की आवश्यकता है।


किसी लड़के ने आज मुझे यह बताने की कोशिश की कि जब mysql_real_escape_string()उनके बाकी कोड पीडीओ हैं, तो उन्हें कोई समस्या नहीं है । इन अलग-अलग एपीआई के साथ काम करने के दौरान क्या मुझे कुछ नहीं मिला है? क्या मैं यहाँ अज्ञानी हूँ? यह "अब हटाए गए" सवाल stackoverflow.com/q/34209127 के लिए केवल 10K + सदस्यों द्वारा देखा जा सकता है किसी को भी आश्चर्य होना चाहिए। इस के संबंध में $stmt3->execute(array('classID' => $_POST['class'],'studentID' => mysql_real_escape_string($substr)))- क्या मुझे यहाँ कुछ याद आ रहा है?
फंक फोर्टी निनेर

1
@ फ्रेड- ii- आप सही हैं :) मैनुअल पढ़ने से पता चलता है कि आप सही हैं । जो शायद हुआ है, वह चुपचाप डिफ़ॉल्ट मापदंडों के साथ एक कनेक्शन बनाने की कोशिशmysql_real_escape_string() करेगा जो तब ओपी के लिए काम करता था। तो यह सिर्फ चरित्र सेट प्राप्त करने के लिए कनेक्शन बना दिया। इसलिए ओपी के 2 कनेक्शन हैं
रिज़ियर123

यदि ओपी ने कम से कम मुझे / हमें बताया कि उनके पास शायद 2 अलग कनेक्शन थे, तो मैं शायद सहमत हूं; उन्होंने अन्यथा निर्णय लिया। हालाँकि, मैं अभी भी नहीं देख सकता कि यह कैसे काम करेगा। अगर ऐसा होता है, तो मैं चकित हूं।
फंक फोर्टी निनेर

@ फ्रेड- ii- देखें: link_identifier यह डिफ़ॉल्ट कनेक्शन सेटिंग्स का उपयोग करेगा, जो इसके साथ मिलता है ini_get()। तो यह शायद डिफ़ॉल्ट सेटिंग्स के साथ ओपी के लिए काम करता है। मैं बस इसे छोड़ दूंगा और कुछ नई कॉफी (and) प्राप्त करूंगा।
Rizier123

आप कुछ के बारे में जोड़ना चाह सकते हैं sqlsrv_query()। मैंने अभी एक सवाल यहां बंद किया है stackoverflow.com/q/41263771
फंक फोर्टी निनेर

2

तकनीकी रूप से आप जितने चाहें उतने अलग कनेक्शन का उपयोग कर सकते हैं, जबकि आपकी समस्या केवल टाइपो के कारण होती है - आप केवल एक एक्सटेंशन से दूसरे के कार्यों के साथ संसाधनों का उपयोग नहीं कर सकते हैं, जो काफी स्पष्ट है।

हालांकि, आपको एक ही स्क्रिप्ट से कई कनेक्शनों से बचना चाहिए , एकल एपीआई या विभिन्न लोगों से कोई फर्क नहीं पड़ता। चूंकि यह आपके डेटाबेस सर्वर पर बोझ डालेगा और इसके संसाधनों को समाप्त करेगा। इसलिए, यद्यपि तकनीकी रूप से आप कर सकते हैं, आपको अपने कोड में अलग-अलग एक्सटेंशन नहीं मिलाना चाहिए, रिफैक्टिंग की छोटी अवधि के लिए बचत करें।


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

-3

MySQLiएक बहुत अधिक सुरक्षित है MySQLजो वैसे भी अब पदावनत है। यही कारण है कि आप के साथ रहना चाहिए MySQLiऔर आप उन्हें मिश्रण नहीं कर सकते क्योंकि वे दोनों अलग हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.