2012-02-15 10 views
6

Estoy tratando de crear una conexión a una base de datos MySQL utilizando Mysqli en PHP. Cuando ejecuto el código siguiente en una página independiente:Nuevo objeto Mysqli es nulo

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

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

lo único que consigue es un objeto emite Mysqli vacío donde todas las propiedades son nulos. No se muestra ningún error ni nada.

Tampoco veo ninguna entrada en los registros de Apache o MySQL. Estoy un poco perdido en este.

+0

intento '$ enlace = new mysqli ('localhost', 'miUsuario', 'mypass', 'dbname') o morir (mysqli_error());' – crush

+1

@crush : Creo que te refieres a '$ link = new mysqli ('localhost', 'myuser', 'mypass', 'dbname') o die (mysqli_connect_error());'. La función 'mysqli_error()' espera un identificador de enlace como su parámetro. –

+0

@Justin, lo cambié a lo que recomienda y no cambió en absoluto. Después de instanciar el objeto mysqli, la función mysql_connect_error devuelve null, suponiendo que no hay ningún error. Aunque las propiedades del objeto mysqli son todas nulas. Cuando descargo $ $, obtengo: –

Respuesta

8

Tuve este problema y me estaba volviendo loco al intentar depurarlo. Resulta que a veces, por cualquier razón, el objeto mysqli no se llena, pero el acceso directo a sus propiedades aún ejecuta el código nativo detrás de él. Entonces, aunque var_dump de todo el objeto mysqli muestra propiedades nulas, están ahí si accede a ellas individualmente. Si errorno resulta ser falso, puede haber ejecutado una consulta válida con un conjunto de resultados vacío que no esperaba. Espero que esto ayude.

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

var_dump($mysqli); 

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

y la salida:

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

También encontré este problema y tu solución funcionó, pero encontré que 'print_r' también imprimirá adecuadamente el objeto. – user3158900

1

Sé que esto es un poco viejo, pero para cualquier persona que todavía tiene esto como un tema recurrente, el comentario de user3158900 al post de danperron tiene la solución. Estoy volviendo a publicar aquí para hacerlo más visible. Además, se incluye un código de ejemplo:

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>"; 
Cuestiones relacionadas