2009-10-16 6 views
1

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?

Répondre

2

mysqli :: next_result renvoie la valeur false s'il y a une erreur. Cet exemple provient du docs

$dbConnection-->multi_query($query); 
do { 
    $dbConnection-->use_result()->close(); 
    echo "Okay\n"; 
} while ($mysqli->next_result()); 

if ($mysqli->errno) { 
    echo "Stopped while retrieving result : ".$mysqli->error; 
} 
+1

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. –

+0

Ça ne marche pas pour moi. Au début, les drapeaux "mysqli_report" ne sont pas clairs. –

+0

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". –

Questions connexes