2012-02-15 6 views
6

PHPでMysqliを使用してMySQLデータベースへの接続を作成しようとしています。私は、スタンドアロンのページに次のコードを実行すると:すべての私は出力を取得新しいMysqliオブジェクトがnullです

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

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

は、すべてのプロパティがnull、空のMysqliオブジェクトです。エラーも何も表示されません。

また、ApacheログまたはMySQLログには何も表示されません。私はこの1つに迷っています。

+0

'$リンクは=新しいmysqliの( 'localhostの'、 'myuserの'、 'MYPASS'、 'DBNAME')しようとしたり(mysqli_errorを())死ぬ;' – crush

+1

@crush : '$ link = new mysqli( 'localhost'、 'myuser'、 'mypass'、 'dbname')またはdie(mysqli_connect_error());を意味します。 mysqli_error()関数はパラメータとしてリンク識別子を期待しています。 –

+0

@ジャスティン、私はそれをあなたが推薦したものに変更しました。全く変化しませんでした。 mysqliオブジェクトをインスタンス化した後、mysql_connect_error関数はエラーがないと仮定してヌルを返します。 mysqliオブジェクトのプロパティはすべてnullです。 $リンクをダンプすると、次のようになります。 –

答えて

8

私もこの問題を抱えていて、デバッグしようと狂っていました。何らかの理由でmysqliオブジェクトにデータが取り込まれないことがありますが、そのプロパティに直接アクセスしても、その背後にあるネイティブコードが実行されることが判明しています。したがって、mysqliオブジェクト全体のvar_dumpはnullプロパティを表示しますが、個別にアクセスするとそこに存在します。 errornoがfalseであると判明した場合、期待していなかった空の結果セットを持つ有効なクエリを実行した可能性があります。お役に立てれば。

$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>"; 
関連する問題