2013-06-04 5 views
7

मेरे पास php स्क्रिप्ट है जिसे स्थानीय साइट पर डीबी से कनेक्ट करने का प्रयास करना चाहिए। यदि स्थानीय डीबी उपलब्ध नहीं है तो इसे दूरस्थ सर्वर पर डीबी से कनेक्ट करने का प्रयास करना चाहिए।php mysql_connect चेतावनी अक्षम

$dblink = mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS) or $RC = 1; 
if($RC) { 
    $dblink = mysql_connect(DBHOST_REMOTE, DBUSER, DBPASS) or die('Could not connect'.mysql_error()); 
} 

समस्या यह है कि अगर कनेक्शन पहली बार विफल रहता है तो मैं पृष्ठ पर चेतावनी संदेश प्रदर्शित नहीं करना चाहता हूं। क्या mysql_connect() फ़ंक्शन के लिए केवल चेतावनी संदेश को अक्षम करने का कोई तरीका है?

+7

'mysql_ *' का उपयोग न करें क्योंकि उन्हें बहिष्कृत किया गया है। 'पीडीओ' या 'mysqli_ *' का उपयोग करें – DonCallisto

+3

आपको वास्तव में 'या $ आरसी = 1' भाग को हटा देना चाहिए।बस '! $ Dblink' की जांच करें। – ThiefMaster

+1

यदि आप mysqli या PDO का उपयोग करते हैं, तो इसे अपवादों को पकड़कर इसे और अधिक सुंदर ढंग से संभाला जा सकता है, जिसे आपको ** बहिष्कृत ** mysql API के बजाय वैसे भी करना चाहिए। – deceze

उत्तर

8

हाँ, तो चेतावनी/त्रुटि संदेशों को दबाने के लिए की तरह एक @ चिह्न जोड़ें, फिर त्रुटि एक बार अपने स्वयं के कार्य करें:

$dblink = @mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS); 

if (!$dblink) 
{ 
    $dblink = @mysql_connect(DBHOST_REMOTE, DBUSER, DBPASS);     
} 

if (!$dblink) 
{ 
    $message = sprintf(
     "Could not connect to local or remote database: %s", 
     mysql_error() 
    ); 
    trigger_error($message); 
    return; 
} 

देखभाल है कि आप तो अपने स्वयं के रिपोर्टिंग सभी त्रुटि को संभालने की ज़रूरत है। यदि आप कोई गलती करते हैं तो इस तरह के कोड को डीबग करना मुश्किल होता है। , जब कनेक्शन विफल रहता है

if (!$connection = mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS)) { 
    die('And here we connect to the other server'); 
} 

यह एक बूलियन है, जो अगर बयान सही होने के लिए कारण होगा रिटर्न:

+4

कृपया * कभी भी * @ 'का उपयोग न करें और इसके बजाय त्रुटि प्रबंधन का उपयोग करें! – HamZa

+4

* sidenote: * बहिष्कृत 'mysql_ *' फ़ंक्शंस का उपयोग करना बंद करें। इसके बजाय MySQLi या पीडीओ का उपयोग करें। '@' का उपयोग करके दबाने के लिए, संभाल नहीं है। Try-Catch – Raptor

+4

@HamZa '@' ठीक है, अगर आपको पता है कि आप त्रुटियों को दबा रहे हैं और उन्हें संभालने वाले हैं! इस मामले में, वह जांच कर रहा है कि कनेक्शन सफल था या नहीं, * एक त्रुटि * की उम्मीद है। वह सिर्फ त्रुटि संदेश प्रिंट स्क्रीन पर नहीं दे रहा है। आपको जितना संभव हो सके '@' * का उपयोग करना चाहिए, लेकिन इसका मतलब यह नहीं है कि आप इसका उपयोग कभी नहीं करेंगे जब आप जानते हैं कि आप क्या कर रहे हैं। – deceze

0

आप निम्न विधि का उपयोग नहीं कर सकते।

+1

जो अभी भी स्क्रीन पर एक त्रुटि प्रिंट करता है, वैसे ही ओपी से बचने की कोशिश कर रहा है। – deceze

4

आप त्रुटि त्रुटियों बंद करने के लिए रिपोर्ट करने error_reporting(0); और speacific पेज

सिर्फ अपनी जरूरत

# config.ini 
# PHP error reporting. supported values are given below. 
# 0 - Turn off all error reporting 
# 1 - Running errors 
# 2 - Running errors + notices 
# 3 - All errors except notices and warnings 
# 4 - All errors except notices 
# 5 - All errors 

Doc

सिर्फ इस

की तरह पेज में सिर पर सेट प्रति के रूप में स्थापित करने के लिए चेतावनी सेट कर सकते हैं
<?php 

     error_reporting(E_ERROR | E_WARNING | E_PARSE); 

?> 

मुझे बताएं कि क्या मैं कर सकता हूं आप और अधिक

+0

रिपोर्टिंग स्तर को कम करके कभी भी त्रुटियों को छुपाएं! – Ochi

+0

उन्हें केवल चेतावनी छिपाने की आवश्यकता है ताकि हम आपको @Ochi – liyakat

+0

नंबर पर वोट करने से पहले समझ सकें - आप जो भी प्रस्तावित कर रहे हैं, वह हर दूसरी त्रुटियों को दबाए जाने के साथ समाप्त हो जाएगा - और इससे अधिक गंभीर समस्याएं हो सकती हैं – Ochi

2

उचित समाधान उपयोगकर्ता को PHP त्रुटियों, चेतावनियों और नोटिस प्रदर्शित करने को अक्षम करना है। यह अपने php.ini विन्यास फाइल में display_errors सेटिंग के माध्यम से किया जा सकता है:

display_errors = Off 

यह भी ini_set() के माध्यम से रन टाइम पर सेट किया जा सकता:

ini_set('display_errors', '0'); 

Manual से:

display_errors
यह निर्धारित करता है कि त्रुटियों को मुद्रित किया जाना चाहिए या नहीं आउटपुट के हिस्से के रूप में स्क्रीन पर एड करें या यदि उन्हें उपयोगकर्ता से छुपाया जाना चाहिए।

ऐसा करने से किसी भी उपयोगकर्ता को संवेदनशील PHP त्रुटि संदेशों को देखने से रोका जा सकता है, लेकिन फिर भी उन्हें लॉग फ़ाइल में मुद्रित करने की अनुमति मिलती है।

@ दमन विधि का उपयोग आप जो चाहते हैं वह करेंगे, लेकिन यह अभी भी किसी अन्य PHP त्रुटियों/चेतावनियों को उपयोगकर्ता को मुद्रित करने की अनुमति देगा, जो एक सुरक्षा समस्या है क्योंकि उन त्रुटियों में संवेदनशील जानकारी हो सकती है जिसे प्रकट नहीं किया जाना चाहिए ।

+0

हां और नहीं। आप निश्चित रूप से सही हैं, लेकिन कम से कम विकास के दौरान आप * अप्रत्याशित त्रुटियों के प्रदर्शन को दबाना नहीं चाहते हैं। ओपी एक बहुत विशिष्ट * अपेक्षित * त्रुटि को दबाने के लिए चाहता है हालांकि ... – deceze

+1

@ विकास के दौरान त्रुटियों को प्रदर्शित करने के लिए यह व्यक्तिगत डेवलपर वरीयता पर निर्भर करता है। स्क्रीन पर त्रुटियों पर निर्भर होने से त्रुटियों में कमी आ सकती है क्योंकि पृष्ठ की संरचना और जिस बिंदु पर संदेश मुद्रित होता है, उस पर निर्भर करता है कि आप वास्तव में ब्राउज़र में त्रुटि> स्रोत के बिना त्रुटि नहीं देख सकते हैं। – MrCode

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