W przedstawionym kodzie PHP komunikat w miejscu znaków zapytania wyświetla się wtedy, gdy zmienna $x ma wartość true. Który komunikat opisuje tę sytuację zgodnie z prawdą niezależnie od zawartości tabeli?
$x = mysqli_query($polaczenie, 'DELETE FROM mieszkancy WHERE id = 5'); if ($x) echo '???';
true.DROP TABLE, a DELETE kasuje tylko wybrane wiersze.true pojawi się także wtedy, gdy rekordu o id 5 nie ma i nic nie usunięto.DELETE funkcja mysqli_query() zwraca true po poprawnym wykonaniu polecenia.Dla poleceń, które nie zwracają wierszy, takich jak DELETE, UPDATE czy INSERT, funkcja mysqli_query() zwraca true, gdy serwer wykonał polecenie bez błędu. Nie oznacza to jednak, że coś zostało usunięte. Jeśli w tabeli nie ma rekordu o id = 5, zapytanie też jest poprawne, tylko obejmuje zero wierszy.
Liczbę rekordów, których dotyczyła zmiana, podaje mysqli_affected_rows($polaczenie). Dopiero sprawdzenie, czy ta wartość jest większa od zera, pozwala uczciwie napisać, że rekord usunięto. W nowszych wersjach PHP błąd zapytania domyślnie zgłaszany jest wyjątkiem, ale sens wartości true pozostaje ten sam.
Ta sama zasada dotyczy poleceń UPDATE i INSERT.
Najbardziej kusi komunikat o usunięciu rekordu nr 5, bo właśnie tego oczekuje autor kodu. Wartość true mówi jednak tylko, że polecenie było poprawne i serwer je wykonał. Gdy rekordu o takim identyfikatorze nie ma, DELETE kończy się sukcesem i nie usuwa niczego. Żeby to rozróżnić, sprawdza się mysqli_affected_rows().
Usunięcie całej tabeli to zupełnie inne polecenie, DROP TABLE mieszkancy. DELETE z warunkiem WHERE usuwa wyłącznie wiersze spełniające warunek, a struktura tabeli zostaje.
Komunikat o braku połączenia też tu nie pasuje. Gdyby połączenia nie było, zapytanie zakończyłoby się błędem i $x nie miałoby wartości true. Bez zastrzeżeń prawdziwe jest więc tylko zdanie o poprawnym wykonaniu polecenia.
Przy czytaniu kodu warto więc odróżniać sukces wykonania polecenia od tego, czy polecenie faktycznie zmieniło jakiekolwiek dane w tabeli.