2010-09-09 11 views
5

Sto cercando un modo per testare solo la parte di connessione di una connessione php/mysqli. Sto migrando da un server LAMP compilato su Vista allo stesso su Ubuntu e sto avendo problemi a far funzionare mysqli. So che tutti i moduli appropriati sono installati e PhpMyAdmin funziona perfettamente. Ho migrato un sito e nessuna delle connessioni mysqli funziona. L'errore che sto ottenendo è la "chiamata alla funzione membro xxx() su non oggetto" che di solito si apre quando la query stessa è cattiva o la query viene preparata da una connessione errata. So che la query stessa è buona perché funziona bene sull'altro server con la stessa struttura e dati del database. Questo mi lascia con la connessione. Ho cercato di scrivere una semplice connessione di prova e metterlo in un ciclo come ..Test della connessione php/mysqli

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

Si echi "connesso", che è grande. Ma solo per controllare ho cambiato la password nella connessione in modo che sapevo che non sarebbe in grado di connettersi e ancora eco "connesso". Quindi, il test if/else non è chiaramente la strada da percorrere ....

+0

Potete per favore mostrare come si fa il collegamento *** qui *** (puoi omettere l'utente e la password)? – 2ndkauboy

+0

"chiamata a membro funzione xxx() su oggetto non" l'errore non ha nulla a che fare con la connessione al database. –

risposta

11

mysqli_connect() restituisce sempre un oggetto MySQLi. Per verificare la presenza di errori di connessione, utilizzare:

$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

Questo ha funzionato. Grazie, Lek. Certo, ha solo approfondito il mistero. Ora so che il database è in realtà in collegamento, il che significa che il mio script sta effettivamente sputando il bit alla query stessa. Ciò ha ancora meno senso in quanto la query funziona su altri server. Ho persino scritto una semplice query di test che, purtroppo, restituisce ancora l'errore non-object. –

+0

else { echo "Connesso."; } aggiungi; –

0

avete bisogno di più la gestione delle varie chiamate al database errore, quindi. Metodo rapido/sporco è quello di fare semplicemente

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

Tutte le funzioni di restituire il Booleano FALSE in caso di errore, o un oggetto mysqli appropriato con i risultati. Senza il controllo degli errori, faresti:

$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

L'uso di 'mysql_error()' con MySQLi è stupido;) – Lekensteyn

+0

Sì, errore di battitura. Risolto ora. –

+0

morire è sempre male. Invia almeno lo stato 503 e ** mai ** rivela alcuna informazione sensibile come il messaggio di errore mysql. usa invece trigger_error(). Anche se è abbastanza inutile qui, dato che il messaggio di errore di PHP è già abbastanza informativo, se c'è uno qualsiasi –

0

Per test di connessione php in te terminale eseguire:

$ php -r 'var_dump(mysql_connect("localhost:/tmp/mysql.sock", "MYSQL_USER", "MYSQL_PASS"));' 
Problemi correlati