2010-09-09 14 views
5

मैं केवल php/mysqli कनेक्शन के कनेक्शन हिस्से का परीक्षण करने का एक तरीका ढूंढ रहा हूं। मैं उम्बुंटू पर विस्टा पर एक एलएएमपी सर्वर निर्माण से माइग्रेट कर रहा हूं और काम करने के लिए mysqli प्राप्त करने के लिए फिट बैठ रहा हूं। मुझे पता है कि सभी उचित मॉड्यूल स्थापित हैं, और PhpMyAdmin बेकार ढंग से काम करता है। मैंने साइट पर माइग्रेट कर दिया है और कोई भी mysqli कनेक्शन काम नहीं कर रहा है। मुझे जो त्रुटि मिल रही है वह है "गैर-ऑब्जेक्ट पर सदस्य फ़ंक्शन xxx() पर कॉल करें" जो आम तौर पर क्वेरी खराब होने पर क्वेरी खराब होती है या क्वेरी खराब कनेक्शन से तैयार की जाती है। मुझे पता है कि क्वेरी स्वयं अच्छी है क्योंकि यह अन्य सर्वर पर ठीक उसी डेटाबेस संरचना और डेटा के साथ ठीक काम करती है। यह मुझे कनेक्शन के साथ छोड़ देता है। मैंने एक बहुत ही सरल परीक्षण कनेक्शन लिखने की कोशिश की और इसे एक लूप में रखा ..परीक्षण php/mysqli कनेक्शन

if(***connection here ***) 
{ echo "connected"; } 
else 
{ echo "not connected"; } 

यह "कनेक्ट" है, जो बहुत अच्छा है। लेकिन सिर्फ यह जांचने के लिए कि मैंने कनेक्शन में पासवर्ड बदल दिया है, ताकि मुझे पता चले कि यह कनेक्ट नहीं हो पाएगा और यह अभी भी "कनेक्ट" को प्रतिबिंबित करेगा। तो, अगर/अन्य परीक्षण स्पष्ट रूप से जाने का तरीका नहीं है ....

+0

आप कृपया दिखा सकते हैं कि कैसे आप *** कनेक्शन यहाँ कर *** (आप उपयोगकर्ता और पासवर्ड छोड़ सकते हैं)? – 2ndkauboy

+0

"गैर-ऑब्जेक्ट पर सदस्य फ़ंक्शन xxx() पर कॉल करें" त्रुटि डेटाबेस कनेक्शन से कोई लेना देना नहीं है। –

उत्तर

11

mysqli_connect() हमेशा एक MySQLi ऑब्जेक्ट देता है। कनेक्शन त्रुटियों की जांच के लिए, उपयोग करें:

$mysqli_connection = new MySQLi('localhost', 'user', 'pass', 'db'); 
if ($mysqli_connection->connect_error) { 
    echo "Not connected, error: " . $mysqli_connection->connect_error; 
} 
else { 
    echo "Connected."; 
} 
+1

यह काम किया। धन्यवाद, लेक। बेशक, यह केवल रहस्य गहरा कर दिया। अब मुझे पता है कि डेटाबेस वास्तव में कनेक्ट हो रहा है जिसका मतलब है कि मेरी स्क्रिप्ट वास्तव में क्वेरी पर थोड़ा सा थूक रही है। यह कम समझ में आता है क्योंकि क्वेरी स्वयं अन्य सर्वरों पर काम करती है। मैंने एक साधारण परीक्षण क्वेरी भी लिखी है कि, दुख की बात है, अभी भी गैर-ऑब्जेक्ट त्रुटि देता है। –

+0

अन्य { गूंज "कनेक्ट"। } जोड़ें; –

0

आपको विभिन्न डेटाबेस कॉल पर अधिक त्रुटि प्रबंधन की आवश्यकता है। त्वरित/गंदा विधि बस

$whatever = mysqli_somefunction(...) or die("MySQL error: ". mysqli_error()); 

करने के लिए कार्यों के सभी लौट बूलियन गलत करता है, तो एक त्रुटि हुई या परिणामों के साथ एक उपयुक्त mysqli वस्तु है। त्रुटि जाँच के बिना, आप कर रही हैं:

$result = $mysqli->query("blah blah will cause a syntax error"); 
$data = $result->fetchRow(); // $result is "FALSE", not a mysqli_object, hence the "call to member on non-object" 
+1

MySQLl के साथ 'mysql_error() 'का उपयोग बेवकूफ है;) – Lekensteyn

+0

हाँ, टाइपो। अब तय –

+0

मर रहा है मैं हमेशा बुरा है। कम से कम 503 स्थिति भेजें और ** कभी ** ** mysql त्रुटि संदेश जैसी कोई संवेदनशील जानकारी प्रकट न करें। इसके बजाय trigger_error() का उपयोग करें। यद्यपि यह काफी बेकार है, क्योंकि PHP त्रुटि संदेश पहले से ही काफी जानकारीपूर्ण है, अगर कोई –

0

में परीक्षण php कनेक्शन के लिए आप टर्मिनल निष्पादित करें:

$ php -r 'var_dump(mysql_connect("localhost:/tmp/mysql.sock", "MYSQL_USER", "MYSQL_PASS"));' 
संबंधित मुद्दे