J'ai une classe php wrapper pour mysqli qui doit, entre autres choses, être capable de gérer plusieurs requêtes (en utilisant mysqli :: multi_query). Cela fonctionne mais je ne peux pas trouver comment je suis supposé obtenir des détails d'erreur quand l'une des requêtes échoue. Ceci est une version simplifiée du code:Détection d'erreurs dans plusieurs requêtes MySQL en utilisant PHP
$queries=array('SELECT * FROM core_order_items',
'SELaaaaECT * FROM core_order_items',
);
$dbConnection = mysqli_connect('localhost', 'siella', 'arifisis', 'mydb');
$dbConnection->set_charset('utf8');
$dbConnection->multi_query(implode(';', $queries)) ;
$i=0;
do {
echo "Query: " . $queries[$i] . " - ";
$resultset=$dbConnection->store_result();
if($resultset===false && strlen($dbConnection->errno)>0) {
echo "Returned error for query " . $i . "<br>";
}
else {
echo "Returned set for query " . $i . "<br>";
}
$i++;
}
while ($dbConnection->next_result());
mysqli_close($dbConnection);
Remarquez comment des deux requêtes SQL le premier est très bien et le second invalide. Le résultat est:
Query: SELECT * FROM core_order_items - Returned set for query 0
Qu'est-il arrivé à ma deuxième question? Si je le répare, il apparaît, mais quand une erreur se produit, c'est comme si elle n'était pas dans le tableau. Comment obtenir l'erreur no/message?
Ah, il effectuait donc une vérification d'erreur avant qu'une erreur ne se produise. Alors, juste comme une erreur est apparue, elle cessait de vérifier. Formidable. –
Ça ne marche pas pour moi. Au début, les drapeaux "mysqli_report" ne sont pas clairs. –
Deuxièmement, j'utilise le code SQL: "set @ q = 1; sélectionnez @q comme max_id de dual1;" et "$ mysqli- errno" n'a pas d'erreurs pour moi. Quand il devrait être quelque chose comme ceci: "[Err] 1146 - Table 'test.dual1' n'existe pas". –