Nel mio ambiente di sviluppo / locale, la query MySQLi sta funzionando correttamente. Tuttavia, quando lo carico sul mio ambiente host web, ottengo questo errore:
Errore irreversibile: chiamata a una funzione membro bind_param () su un oggetto non in ...
Ecco il codice:
global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param("i", $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);
Per verificare la mia query, ho provato a eseguire la query tramite il pannello di controllo phpMyAdmin e il risultato è OK.
risposte:
63 per risposta № 1Prima di tutto, avere sempre questa linea prima che MySQLi si connetta tutti i tuoi ambienti:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Successivamente verranno trasferiti tutti gli errori MySQLin eccezioni PHP. L'eccezione non rilevata, a sua volta, causa un errore fatale di PHP. Quindi, in caso di errore MySQL, otterrai un errore PHP convenzionale, che ti renderà immediatamente conto della causa dell'errore: una traccia dello stack ti condurrà nel punto esatto in cui si è verificato l'errore.
Nota che devi essere in grado di vedere Errori PHP in generale. E qui va davvero la questione di ambienti diversi:
Su un sito live devi dare un'occhiata ai log degli errori, quindi le impostazioni devono essere
error_reporting(E_ALL); ini_set("display_errors", 0); ini_set("log_errors", 1);
Mentre si trova su un server di sviluppo locale, è possibile effettuare errori sullo schermo:
error_reporting(E_ALL); ini_set("display_errors", 1);
E una piccola lista di quello che tu non dovrebbe:
- Utilizzare l'operatore di soppressione degli errori (
@
) - Uso
die()
oecho
o qualsiasi altra funzione per stampare incondizionatamente il messaggio di errore sullo schermo. PHP può già ripetere l'operazione, non è necessaria alcuna assistenza. - Test del risultato della query manualmente (come
if($result)
) non ha alcun senso. O la tua query non è riuscita e otterrai già l'eccezione di errore, oppure è andato tutto bene e non c'è nulla da testare. - Utilizzare try..catch per echeggiare il messaggio di errore. Ancora una volta PHP può farlo meglio, molto meglio.