Dans mon environnement de développement/local, la requête MySQLi fonctionne correctement. Cependant, lorsque je le télécharge sur mon environnement d’hôte Web, j’obtiens cette erreur:
Erreur fatale: appel à un membre de la fonction bind_param () sur un non-objet dans ...
Voici le code:
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);
Pour vérifier ma requête, j'ai essayé de l'exécuter via le panneau de configuration phpMyAdmin et le résultat est OK.
Tout d’abord, ayez toujours cette ligne avant que MySQLi se connecte dans all vos environnements:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Après cela, toutes les erreurs MySQL seront transférées dans des exceptions PHP. L’exception Uncaught, à son tour, génère une erreur fatale PHP. Ainsi, en cas d'erreur MySQL, vous obtiendrez une erreur conventionnelle PHP. Cela vous fera instantanément prendre conscience de la cause de l'erreur. Une trace de pile vous mènera à l'endroit exact où une erreur s'est produite.
Notez que vous devez être capable de voir PHP erreurs en général . Et voici en effet la question des différents environnements:
Sur un site actif, vous devez jeter un coup d’œil dans les journaux d’erreurs, les paramètres doivent donc être conservés.
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
Sur un serveur de développement local, vous pouvez commettre des erreurs à l'écran:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Et une petite liste de ce que vous ne devriez pas :
@
)die()
ou echo
ou toute autre fonction pour imprimer le message d'erreur à l'écran sans condition. PHP peut déjà y revenir, aucune aide n'est requise.if($result)
) n'a aucun sens. Soit votre requête a échoué et vous obtiendrez déjà l’exception d’erreur, soit tout allait bien et il n’ya rien à tester.Je ne pense pas que vous ayez créé l'objet.
$ mysqli = new mysqli ('localhost', 'mon_utilisateur', 'mon_password', 'monde');
mais je vous suggère vraiment d'utiliser PDO à la place.