update tbl_test,tbl_test2 set tbl_test.num1 = 100,tbl_test2.num1=100 where tbl_test.num2 = 5 and tbl_test2.num2 = 5;
https://dev.mysql.com/doc/refman/8.0/en/update.html
#Version1:
<?php
$link = new mysqli('localhost','root','','databasex');
if ($link->connect_errno) {
printf("Connect failed: %s\n", $link->connect_error);
exit();
}
$further_part1 = 'UPDATE';
$tbl_double = ['tbl_test','tbl_test2'];
$further_part2 = 'SET num1=49 where num2=5;';
function double_print($conn,$first_part,$arr,$second_part,$z=0,$status=null) {
if($z<count($arr)) {
$status = $conn->query($first_part.' '.$arr[$z].' '.$second_part);
double_print($conn,$first_part,$arr,$second_part,$z+1);
}
return $status;
}
var_dump(double_print($link,$further_part1,$tbl_double,$further_part2));
?>
#Version2:
<?php
// ...
function double_print($conn,$first_part,$arr,$second_part,$successful=null,$z=0,&$status=null) {
if($z<count($arr)) {
$status = (bool)$conn->query($first_part.' '.$arr[$z].' '.$second_part);
if($successful===true) {
var_dump((bool)$status);
}
double_print($conn,$first_part,$arr,$second_part,$successful,$z+1,$status);
}
if($successful!==true) {
return ($status);
}
}
(double_print($link,$further_part1,$tbl_double,$further_part2,true));
?>
#Other:
<?php
$link = new mysqli('localhost','root','','databasex');
$a_lot_of_tables = array('tbl_test','tbl_test2');
foreach($a_lot_of_tables as $table) {
$final = $query = $link->query('UPDATE '.$table.' SET num1=54 WHERE num2=9;');
var_dump($final);
}
?>
#Version2:
Syntax:
bool double_print (mysqli $connect, string $first_part_query, array $array, string $second_part_query, [bool $status1=null], [int $iterator=0], [bool $status2=null]);
Parametr $connect odpowiada za połączenie się z bazą. $first_part_query, to pierwsza część zapytania do bazy, np. delete. Następny argument - $array, to tablica, w niej są nazwy naszych tabel, które są w bazie danych. $second_part_query - druga część zapytania SQL. Ostatnie 3 parametry są opcjonalne, to znaczy nie trzeba ich pisać, ponieważ mają ustawione początkowe wartości. $status1 odpowiada za wyświetlenie komunikatów o powodzeniu zapytania bool(true) lub niepowodzeniu bool(false). $iterator mówi skryptowi od którego elementu tablicy ma wykonywać zapytania, dla jakich tabel. $status2 - nie można chyba ustawić innych wartości temu argumentowi niż $status2, ponieważ wtedy skrypt zwróciłby błąd.
Gdy $status1 jest ustawiona na true, to wtedy pokażą się wszystkie komunikaty o powodzeniu akcji zapytania (bool(true), bool(false), itd.). Natomiast jeśli jego wartość wynosi false lub ma jakąkolwiek inną wartość różną od true, to funkcja zwraca tylko ostatni rezultat zapytania np. bool(false).
To tyczy się tylko #Version2, bo składnia #Version1 jest trochę inna.
Example:
$further_part1 = 'DELETE FROM';
$tbl_double = ['tbl_test','tbl_test2'];
$further_part2 = 'WHERE num2=9;';
(double_print($link,$further_part1,$tbl_double,$further_part2,true));
// var_dump(double_print($link,$further_part1,$tbl_double,$further_part2));
Z tych tabel: tbl_test, tbl_test2:
+------+------+
| num1 | num2 |
+------+------+
| 101 | 5 |
| 101 | 5 |
| 40 | 9 |
+------+------+
rezultat jest następujący:
+------+------+
| num1 | num2 |
+------+------+
| 101 | 5 |
| 101 | 5 |
+------+------+
Skrypty: #Version1, #Version2 nie mają autorskiej (czytaj: tutaj/w tym kodzie mojej) obsługi błędów, czyli np. można wpisać pod zmienną $iterator, np. 55 i nie ma/wyświetla błędu, że jesteśmy poza elementami tablicy (chodzi oto, że warunek w if nie jest prawdziwy i nie dochodzi do rekurencji).