Si j'utilise un peu de code comme ceci:
$update_result = mysqli_query( $link , $sql_update_login ) or die ('Unable to execute query. '. mysqli_error($link));
Doit-il mourir ou pouvez-vous poser une autre requête par la suite? Comme une fonction prédéterminée qui écrit un journal de l'erreur dans une autre table? Tel que:
$update_result = mysqli_query( $link , $sql_update_login ) or function('$query, $error);
Quelles sont les autres options après 'ou'? Je ne l'ai pas trouvé dans la documentation, tout indice est apprécié.
Doit-il mourir
Bien au contraire, il ne devrait pas die()
jamais.
PHP est un langage de mauvaise hérédité. Très mauvaise hérédité. Et or die()
avec le message d'erreur étant l'un des pires éléments:
die()
ne vous donne aucune indication sur le lieu où une erreur s'est produite. Et dans une application relativement grosse, ce sera assez pénible à trouver.Donc, n'utilisez jamais die()
avec les erreurs mysql, même pour le débogage temporaire: il y a de meilleures façons.
Pour votre requête, vous n'avez que 2 choix:
si vous allez utiliser mysqli_query()
jusqu'au bout dans votre code d'application (ce qui est faux mais sur StackOverflow, on ne vous apprendra jamais autrement), vous pouvez utiliser trigger_error()
au lieu de die. Il générera une erreur conventionnelle PHP et sera automatiquement enregistré, en fonction des paramètres de PHP.
$result = mysqli_query($link , $sql) or trigger_error($link->error."[ $sql]");
si vous allez utiliser mysqli_query()
dans le cadre de la bibliothèque d'abstraction, vous devez lancer une nouvelle exception, car vous aurez besoin d'une trace de pile (toujours fournie avec exception) pour avoir une idée de l'emplacement de cette erreur.
Cependant, vous ne pouvez pas utiliser new Exception
avec l'opérateur OR
. Alors, le code devient un peu plus long:
$result = mysqli_query($link , $sql);
if (!$result) {
throw new Exception(mysqli_error($link)."[ $sql]");
}
Ce qui n'est pas un gros problème car vous devrez l'écrire une seule fois.
Update. Comme il s'est avéré, mysqli est capable de générer des exceptions lui-même , ce qui peut nous éviter d'écrire le code de traitement manuellement:
$result = mysqli_query($link, $sql);
Ce code lève une exception en cas d'erreur et vous serez donc toujours informé sans code supplémentaire. Cependant, dans les exemples précédents, une requête SQL a été ajoutée au message d'erreur, ce qui peut être très utile. Vous pouvez donc vous en tenir aux méthodes susmentionnées.
Une note importante
une fonction prédéterminée qui écrit un journal de l'erreur dans une autre table?
C'est apparemment une mauvaise idée. Surtout si vous voulez écrire un message d'erreur sur le même support qui a échoué lors de la tentative précédente.
Les erreurs doivent être consignées dans le média le plus robuste - un journal en texte brut. Il suffit donc de configurer votre PHP pour écrire des journaux d’erreur et les vérifier régulièrement.
or
est juste un opérateur (très similaire à ||
).
La syntaxe or die()
fonctionne car or
court-circuite, ce qui signifie que si la première instruction est vraie, True or X
sera toujours vrai, donc X
n'est pas évalué et votre script n'est pas die
.
Oui, vous pouvez fournir une fonction différente après le (ou) . J'ai testé les éléments suivants:
mysqli_query($sel_db,'what!') or some_func(mysqli_error($sel_db));
function some_func($str) {
die("ERROR: ".$str);
}
Il n'est pas nécessaire que ce soit spécifiquement die()
, mais cela doit empêcher le script de s'interrompre en appelant exit()
ou die()
, ou de déclencher une exception. Sinon, le script continuera avec la valeur de retour de cette fonction (qui est probablement nulle ou une sorte de courrier indésirable) dans $update_result
, ce qui causera presque certainement des problèmes.