Base de données de gestion d'Erreur problème dans CodeIgniter
J'utilise CodeIgniter que mon application web framework. J'ai utilisé un simple Try/Catch et j'ai envoyé un valeur de l'échantillon pour le tester, et il a échoué!
Je sais que je peux utiliser $this->db->escape()
fonction pour résoudre mon problème de données, mais je veux juste savoir: Pourquoi TRY/CATCH ne peut pas attraper cette erreur!
Controler code:
$this->load->model('user_model');
$result = $this->user_model->test_user("tes'ti");
Code du modèle:
function test_user($username){
try {
$query_str = "SELECT * FROM tbl_user WHERE username = '".$username."'";
$result = $this->db->query($query_str);
return $result;
} catch (Exception $e) {
return;
}
}
De sortie:
A Database Error Occurred
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ti'' at line 1
SELECT * FROM tbl_user WHERE username = 'tes'ti'
Laissez-moi savoir, où j'ai fait une erreur, si je l'ai fait!
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de lever une exception si il y avait une certaine erreur mysql:
query
fonction$this->db->query
. Si vous essayez de le même code avec de simplesmysql_query
de commande par exemple dans une page de test, il doit l'attraper.query
la fonction renvoie le résultat ou le résultat par la levée d'une exception ou d'une aidemysql_error()
fonction, vous pourriez vouloir vérifier que, pour confirmer, juste au cas où.@Monica, ne sais pas si cela aide, mais vous devez savoir que l'IC fonctions de base de données ne jamais jeter de toutes les erreurs. Ils ont juste retourner true ou false. Donc @Sarfraz est droit, vous devez vérifier pour vrai/faux vous-même et/ou de lancer des Exceptions à vous-même.
Aussi, votre code de gestion des exceptions ne fait rien. Cela signifie qu'il va continuer à exécuter les scripts à venir après elle, y compris les scripts qui fonctionnent avec le jeu d'enregistrements qui vient d'échouer.
Au lieu d'obtenir le code d'allumage db errormsg (html), j'ai voulu obtenir un json affichage, puis à l'intérieur de la requête ajax je viens de vérifier pour le succès
J'ai réécrit le DB_driver.php dans le
cela va créer un json avec le succès de la valeur en tant que faux
alors je viens de vérifier pour le faux...
Fonctionne pour tous les ma requête ajax .... juste une idée ...
header('Content-Type: application/json');
ainsi avantexit;
La raison pour laquelle vous faites une erreur est dû à " tes**'ti' le **'. utilisation
'$username."'".$username1
Pour moi, le code par @Sarfraz ne fonctionne pas, au moins dans CI 3.1.5 le problème était que $this->db->query a un tas de fonctions d'habillage que d'appeler immédiatement les gestionnaires d'erreur intégré dans le code de l'allumeur.
Si vous voulez jeter un nouveau RuntimeException, puis utilisez $this->db->simple_query méthode à la place.
sur un côté de l'OP devrait examiner les dossiers actifs, quelque chose comme:
doit obtenir autour de ces problèmes parce que codeigniter active record cadre devrait échapper à l'questions pour vous.