Podczas gdy pipodesign poprawił błąd w $ querystring i złagodził problem, faktyczne rozwiązanie nie zostało dostarczone w odniesieniu do błędu ścisłych norm.
Nie zgadzam się z radą SirBT, przejście z DO CZASU DO CZASU nie jest konieczne.
Otrzymany przez nas komunikat dotyczący ścisłych standardów jest dość pouczający. posłuszeństwa, użyj tego:
do{} while(mysqli_more_results($db) && mysqli_next_result($db));
Następnie, nie ma potrzeby, aby napisać exit warunkową lub złamać wewnątrz pętli, ponieważ warunek gdy złamie pętlę na pierwszym wystąpieniu błędu. * uwaga, instrukcja if przed do-while odmówi wejścia do pętli, jeśli pierwsze zapytanie zawiera błąd.
W powyższym przykładzie uruchomione są tylko zapytania INSERT, więc nie otrzymasz żadnych zestawów wyników do przetworzenia. Jeśli chcesz policzyć liczbę dodanych wierszy, użyj mysqli_affected_rows().
jako kompletne rozwiązanie dla Twojego pytania:
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";
wyjściowa:
// 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
LATE EDIT:
Ponieważ ludzie nowi do mysqli są natyka to p ost, oferuję ogólny, ale solidny fragment kodu służący do obsługi zapytań z/bez zestawów wyników przy użyciu funkcji multi_query() i dodawania funkcji do wyświetlania, które zapytanie w tablicy jest obsługiwane ...
Classic "IF() {} WHILE DO {}" Składnia:
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
wynalezione na nowo koła "podczas gdy {}" Składnia (... dla tych, którzy nie jak post-testu pętli):
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
Więc albo snippet podane następujące pytania będzie oferować ten sam wyjściowy:
tablica Zapytanie:
$queries[]="SELECT * FROM `TEST`";
$queries[]="INSERT INTO `TEST` (Col) VALUES ('string1'),('string2')";
$queries[]="SELECT * FROM `TEST`";
$queries[]="DELETE FROM `TEST` WHERE Col LIKE 'string%'";
wyjściowa:
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
Zmienić fragmenty na swoje potrzeby. Pozostaw komentarz, jeśli znajdziesz błąd.
"Próbowałem dodawanie i usuwanie" Czy próbowałeś również ... hhmmmm. idunno dodając czek dla 'mysqli :: more_results()'? – PeeHaa
To prawie bezużyteczne ostrzeżenie. Zasadniczo prosi o napisanie brzydszego kodu. Jaki jest powód tego ostrzeżenia? – Calmarius