2011-02-28 8 views
33

मूल रूप से छद्म में कोड मैंमैं कैसे जांचूं कि PHP पहले से ही डेटाबेस से कनेक्ट है या नहीं?

if (connected_to_any_database()) { 
    // do nothing 
} 
else { 
    mysql_connect(...) 
} 

की तरह कुछ के लिए देख रहा हूँ मैं

connected_to_any_database() 
+0

की [जाँच लें कि mysql कनेक्शन वैध है] संभावित डुप्लिकेट (http://stackoverflow.com/questions/3262463/check -यदि-mysql-कनेक्शन है-वैध) –

उत्तर

43

कैसे लागू करते हैं आप mysql_ping() की कोशिश की?

जांचता है कि सर्वर से कनेक्शन काम कर रहा है या नहीं। यदि यह नीचे चला गया है, तो एक स्वचालित पुन: कनेक्शन का प्रयास किया जाता है।

वैकल्पिक रूप से, एक दूसरे (कम विश्वसनीय) दृष्टिकोण होगा:

$link = mysql_connect('localhost','username','password'); 
//(...) 
if($link == false){ 
    //try to reconnect 
} 

अद्यतन: पीएचपी 5.5 के बाद से, का उपयोग mysqli_ping() बजाय। (आप को शामिल किया है मैं कुछ अन्य फ़ाइल में कहीं मतलब आप सुनिश्चित नहीं हैं)

+4

अद्यतन करता है: PHP 5.5 के बाद, [mysqli_ping() का उपयोग करें '] (http://www.php.net/manual/en/mysqli.ping.php) –

+0

@AlvinK। अगर मैं mysql_ping() दिखाता हूं तो मेरे पास कनेक्शन है। लेकिन जब मैं @ mysqli_ping() का उपयोग करता हूं तो यह दिखाता है कि मैं नहीं करता कनेक्शन नहीं है। मैं क्या मतलब है टी। मैं xampp का उपयोग कर रहा हूँ। स्पष्ट रूप से मेरे PHP कोड का काम अन्य कंप्यूटर पर है, लेकिन मेरे –

+0

@PankajNimgade पर नहीं: लाइब्रेरी या कॉन्फ़िगरेशन समस्या की तरह लगता है, क्या आपने xampp को किसी अन्य संस्करण के साथ पुनर्स्थापित करने का प्रयास किया था? या यहां तक ​​कि nginx + php5-fpm? '--verbose' विकल्प के साथ php-cLI के साथ स्क्रिप्ट चलाएं। –

-2
// Earlier in your code 
mysql_connect(); 
set_a_flag_that_db_is_connected(); 

// Later.... 
if (flag_is_set()) 
mysql_connect(....); 
+0

यह गलत है, क्योंकि mysql सर्वर चला गया है दूर (करीब एक PHP स्क्रिप्ट के जीवन भर के भीतर टाइमआउट @azat टाइमआउट द्वारा कनेक्शन) – azat

+0

है? ओपी के सवाल में क्या आपको यह विचार देता है? –

+0

तो .. हम नहीं जानता क्या उसकी स्क्रिप्ट करते हैं, सही desision – azat

2

से पहले ...

$db = mysql_connect() 

बाद में ...

if (is_resource($db)) { 
// connected 
} else { 
$db = mysql_connect(); 
} 
+0

गलत, mysql सर्वर – azat

+0

@azat जा सकता है @azat क्या आपने कभी * एक PHP स्क्रिप्ट में एक mySQL सर्वर को दूर किया है जब यह कॉन्फ़िगरेशन समस्या नहीं थी? –

+0

हां, मैं देखता हूं, और एक बार – azat

16

PHP के mysql_ping समारोह का उपयोग कर प्रयास करें:

echo @mysql_ping() ? 'true' : 'false'; 

आप पहले जोड़ें "@" MySQL चेतावनी आप इस कामकाज चलाने के लिए मिल जाएगा लगता है करने के लिए करने की आवश्यकता होगी किसी डेटाबेस से कनेक्ट किए बिना।

भी अन्य तरीके हैं, लेकिन यह कोड है कि आप प्रयोग कर रहे हैं पर निर्भर करता है।

+0

Tht "@" ऑपरेटर का उपयोग करने के लिए पर्याप्त कारण नहीं है। – mailo

+1

@mailto, मैं सहमत हूं क्योंकि किसी भी त्रुटि को हल करने के लिए वास्तव में कोई अच्छा विचार नहीं है, हालांकि ... इस मामले में, यह काम पूरा हो जाता है। माइस्क्ल संसाधन की जांच करना बेहतर विकल्प होगा। – McHerbie

+0

हाँ, यह काम पूरा हो जाता है, आप इस कार्य को पूरा करने के लिए eval() का भी उपयोग कर सकते हैं, लेकिन यह ठीक रहेगा? हमें हमेशा मेरी राय में सर्वोत्तम संभव समाधान के लिए जाना चाहिए :) – mailo

0

बैरन श्वार्ट्ज स्थिति दौड़ के लिए है कि कारण ब्लॉग, इस 'लिखने से पहले की जांच' एक बुरा व्यवहार है। वह पकड़ में reconnect के साथ एक कोशिश/पकड़ पैटर्न की वकालत करता है।

function query_database(connection, sql, retries=1) 
    while true 
     try 
     result=connection.execute(sql) 
     return result 
     catch InactiveConnectionException e 
     if retries > 0 then 
      retries = retries - 1 
      connection.reconnect() 
     else 
      throw e 
     end 
     end 
    end 
end 

यहाँ अपने पूर्ण ब्लॉग है:: यहाँ छद्म कोड वह की सिफारिश की है https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/

संबंधित मुद्दे