2012-02-15 36 views
6

Tôi đang cố tạo kết nối tới cơ sở dữ liệu MySQL bằng Mysqli bằng PHP. Khi tôi thực hiện đoạn mã sau vào một đứng một mình trang:Đối tượng Mysqli mới là Null

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

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

Tất cả tôi nhận được outputted là một đối tượng mysqli trống nơi mà tất cả các thuộc tính là null. Không có lỗi hoặc bất cứ điều gì được hiển thị.

Tôi cũng không thấy bất kỳ mục nhập nào trong nhật ký Apache hoặc MySQL. Tôi là người thua cuộc này.

+0

thử '$ link = new mysqli ('localhost', 'myuser', 'mypass', 'dbname') or die (mysqli_error());' – crush

+1

@crush : Tôi nghĩ bạn có nghĩa là '$ link = new mysqli ('localhost', 'myuser', 'mypass', 'dbname') hoặc chết (mysqli_connect_error());'. Hàm 'mysqli_error()' mong đợi một định danh liên kết làm tham số của nó. –

+0

@Justin, tôi đã thay đổi nó thành những gì bạn đề nghị và nó không hề thay đổi. Sau khi instantiatingthe mysqli đối tượng, các mysql_connect_error chức năng trả về null, giả sử không có lỗi. Mặc dù các thuộc tính mysqli của đối tượng là tất cả null. Khi tôi kết xuất $ link, tôi nhận được: –

Trả lời

8

Tôi cũng gặp sự cố này và đã phát điên khi cố gắng gỡ lỗi. Nó chỉ ra rằng đôi khi vì bất cứ lý do gì mà đối tượng mysqli không nhận được dân cư, nhưng trực tiếp truy cập vào các thuộc tính của nó vẫn thực thi mã nguồn gốc đằng sau nó. Vì vậy, mặc dù một var_dump của đối tượng mysqli toàn bộ cho thấy các thuộc tính null, chúng có sẵn nếu bạn truy cập chúng riêng lẻ. Nếu errorno hóa ra là sai, bạn có thể đã thực hiện một truy vấn hợp lệ với một resultset rỗng mà bạn không mong đợi. Hi vọng điêu nay co ich.

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

var_dump($mysqli); 

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

và đầu ra:

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

Chỉ cần chạy qua vấn đề này là tốt và giải pháp của bạn làm việc, nhưng tôi đã tìm thấy 'print_r' sẽ in ra một cách thích hợp đối tượng là tốt. – user3158900

1

Tôi biết đây là một chút cũ, nhưng đối với những ai vẫn có này như một vấn đề lặp đi lặp lại, những nhận xét từ user3158900 bài danperron vừa thể hiện giải pháp. Tôi đang đăng lại ở đây để làm cho nó dễ nhìn hơn. Ngoài ra, một số mã ví dụ được bao gồm:

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>"; 
Các vấn đề liên quan