2012-02-15 11 views
6

मैं PHP में Mysqli का उपयोग कर एक MySQL डेटाबेस से कनेक्शन बनाने का प्रयास कर रहा हूं। जब मैं योग्य स्वतंत्र पृष्ठ पर निम्न कोड निष्पादित करें:नया माइस्क्ली ऑब्जेक्ट शून्य है

<?php 
ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 

$link = new mysqli('localhost', 'myuser', 'mypass', 'dbname'); 
var_dump($link); 

सभी मैं outputted हो एक खाली mysqli वस्तु जहां सभी गुण अशक्त हो रहा है। कोई त्रुटि या कुछ भी प्रदर्शित नहीं होता है।

मुझे अपाचे या MySQL लॉग में कोई भी प्रविष्टि दिखाई नहीं दे रही है। मैं इस पर खो गया हूँ।

+0

कोशिश '$ लिंक = नए mysqli ('स्थानीय होस्ट', 'MyUser', 'mypass', 'DBNAME') या मरो (mysqli_error());' – crush

+1

@crush : मुझे लगता है कि आपका मतलब है '$ link = new mysqli (' localhost ',' myuser ',' mypass ',' dbname ') या मरें (mysqli_connect_error()); '। 'Mysqli_error()' फ़ंक्शन एक लिंक पहचानकर्ता को इसके पैरामीटर के रूप में उम्मीद करता है। –

+0

@ जस्टिन, मैंने इसे आपके द्वारा अनुशंसित करने के लिए बदल दिया और यह बिल्कुल भी नहीं बदला। Mysqli ऑब्जेक्ट को तुरंत चालू करने के बाद, mysql_connect_error फ़ंक्शन शून्य नहीं देता है, कोई त्रुटि नहीं मानता है। हालांकि mysqli ऑब्जेक्ट की गुण सभी शून्य हैं। जब मैं $ लिंक डंप करता हूं, तो मुझे मिलता है: –

उत्तर

8

मुझे यह समस्या भी थी और इसे डीबग करने की कोशिश कर पागल हो रहा था। यह पता चला है कि कभी-कभी किसी भी कारण से mysqli ऑब्जेक्ट पॉप्युलेट नहीं होता है, लेकिन इसके गुणों को सीधे एक्सेस करने से इसके पीछे मूल कोड निष्पादित होता है। तो भले ही पूरे mysqli ऑब्जेक्ट का var_dump शून्य गुण दिखाता है, फिर भी यदि आप उन्हें व्यक्तिगत रूप से एक्सेस करते हैं तो वे वहां हैं। अगर गलती गलत हो जाती है, तो हो सकता है कि आपने एक खाली क्वेरी के साथ एक वैध क्वेरी निष्पादित की हो जिसे आप उम्मीद नहीं कर रहे थे। उम्मीद है की यह मदद करेगा।

$mysqli = mysqli_connect('localhost', 'root', '', 'test', 3306); 

var_dump($mysqli); 

var_dump($mysqli->client_info); 
var_dump($mysqli->client_version); 
var_dump($mysqli->info); 

और आउटपुट:

object(mysqli)[1] 
    public 'affected_rows' => null 
    public 'client_info' => null 
    public 'client_version' => null 
    public 'connect_errno' => null 
    public 'connect_error' => null 
    public 'errno' => null 
    public 'error' => null 
    public 'field_count' => null 
    public 'host_info' => null 
    public 'info' => null 


public 'insert_id' => null 
    public 'server_info' => null 
    public 'server_version' => null 
    public 'stat' => null 
    public 'sqlstate' => null 
    public 'protocol_version' => null 
    public 'thread_id' => null 
    public 'warning_count' => null 

string 'mysqlnd 5.0.8-dev - 20102224 - $Revision: 321634 $' (length=50) 
int 50008 
null 
int 0 
string 'localhost via TCP/IP' (length=20) 
string '5.5.20-log' (length=10) 
int 50520 
+0

बस इस समस्या से भी भाग गया और आपका समाधान काम करता था, लेकिन मुझे लगता है कि 'print_r' ऑब्जेक्ट को उचित रूप से प्रिंट करेगा। – user3158900

1

मैं जानता हूँ कि यह एक सा पुराना है, लेकिन किसी को भी, जो अभी भी एक आवर्ती मुद्दे के रूप में यह है के लिए, danperron के पद पर user3158900 से टिप्पणी समाधान है। मैं इसे और अधिक दृश्यमान बनाने के लिए यहां फिर से पोस्ट कर रहा हूं। इसके अलावा, कुछ उदाहरण कोड शामिल है:

global $mysqli; //assuming you've already created your $mysqli object 
$mysqli->query("INSERT INTO users SET username='jim' and password='somehash'"); 
var_dump($mysqli); //prints the full object but all the values are null 

//the following code prints the full object with appropriate values such as 
//insert_id, affected_rows, etc 
//view http://pastebin.com/Mgd2CZsM for an example of this output 
echo "<pre>" . print_r($mysqli, true). "</pre>"; 
संबंधित मुद्दे