Mentre pipodesign ha corretto l'errore all'interno di $ querystring e alleviato il problema, la soluzione effettiva non è stata fornita per quanto riguarda l'errore Strict Standards.
Non sono d'accordo con il parere di SirBT, non è necessario passare da DO WHILE a WHILE.
Il messaggio di Strict Standard che ricevi è piuttosto informativo. Obbedire, utilizzare questo:
do{} while(mysqli_more_results($db) && mysqli_next_result($db));
Poi, non è necessario per voi a scrivere un uscita condizionato o rompere all'interno del ciclo perché la condizione mentre si romperà il ciclo sulla prima occorrenza di un errore. * nota, l'istruzione if prima del do-while negherà l'accesso al ciclo se la prima query ha un errore.
Nel tuo esempio, stai solo eseguendo query INSERT, quindi non riceverai alcun set di risultati da elaborare. Se vuoi contare quante righe hai aggiunto, usa mysqli_affected_rows().
come una soluzione completa per la tua domanda:
if(mysqli_multi_query($db,$querystring)){
do{
$cumulative_rows+=mysqli_affected_rows($db);
} while(mysqli_more_results($db) && mysqli_next_result($db));
}
if($error_mess=mysqli_error($db)){echo "Error: $error_mess";}
echo "Cumulative Affected Rows: $cumulative_rows";
uscita:
// if no errors
Cumulative Affected Rows: 2
// if error on second query
Error: [something]
Cumulative Affected Rows: 1
// if error on first query
Error: [something]
Cumulative Affected Rows: 0
EDIT IN RITARDO:
Dal momento che le persone nuove da mysqli sono imbattersi in questa P ost, offrirò uno snippet generale ma robusto per gestire le query con/senza set di risultati usando multi_query() e aggiungere una funzionalità per mostrare quale query nell'array viene gestita ...
Classic "IF() {DO {}} WHILE" Sintassi:
if(mysqli_multi_query($mysqli,implode(';',$queries))){
do{
echo "<br><br>",key($queries),": ",current($queries); // display key:value @ pointer
if($result=mysqli_store_result($mysqli)){ // if a result set
while($rows=mysqli_fetch_assoc($result)){
echo "<br>Col = {$rows["Col"]}";
}
mysqli_free_result($result);
}
echo "<br>Rows = ",mysqli_affected_rows($mysqli); // acts like num_rows on SELECTs
} while(next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli));
}
if($mysqli_error=mysqli_error($mysqli)){
echo "<br><br>",key($queries),": ",current($queries),"Syntax Error:<br>$mysqli_error"; // display array pointer key:value
}
//if you want to use the snippet again...
$mysqli_error=null; // clear variables
reset($queries); // reset pointer
Reinvented Wheel "mentre {}" Sintassi (... per chi non come post-test loop):
while((isset($multi_query) && (next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli))) || (!isset($multi_query) && $multi_query=mysqli_multi_query($mysqli,implode(';',$queries)))){
echo "<br><br>",key($queries),": ",current($queries); // display array pointer key:value
if($result=mysqli_store_result($mysqli)){
while($rows=mysqli_fetch_assoc($result)){
echo "<br>Col = {$rows["Col"]}";
}
mysqli_free_result($result);
}
echo "<br>Rows = ",mysqli_affected_rows($mysqli); // acts like num_rows on SELECTs
}
if($mysqli_error=mysqli_error($mysqli)){
echo "<br><br>",key($queries),": ",current($queries),"Syntax Error:<br>$mysqli_error"; // display array pointer key:value
}
//if you want to use the snippet again...
$multi_query=$mysqli_error=null; // clear variables
reset($queries); // reset pointer
Quindi, o frammento dato le seguenti query offrirà la stessa uscita:
serie di query:
$queries[]="SELECT * FROM `TEST`";
$queries[]="INSERT INTO `TEST` (Col) VALUES ('string1'),('string2')";
$queries[]="SELECT * FROM `TEST`";
$queries[]="DELETE FROM `TEST` WHERE Col LIKE 'string%'";
uscita:
0: SELECT * FROM `TEST`
Rows = 0
1: INSERT INTO `TEST` (Col) VALUES ('string1'),('string2')
Rows = 2
2: SELECT * FROM `TEST`
Col = string1
Col = string2
Rows = 2
3: DELETE FROM `TEST` WHERE Col LIKE 'string%'
Rows = 2
modificare la mia frammenti secondo i vostri bisogni. Lascia un commento se scopri un bug.
"Ho provato ad aggiungere e rimuovere" hai anche cercato di ... hhmmmm. idunno aggiungendo un assegno per 'mysqli :: more_results()'? – PeeHaa
Questo è praticamente un avvertimento inutile. Fondamentalmente ti chiede di scrivere un codice più brutto. Qual è la ragione di questo avvertimento? – Calmarius