Przedstawiony fragment kodu PHP ma za zadanie w tabeli dane zmienić wartość pola imie na zawartość zmiennej $a w rekordzie, którego klucz główny id jest równy wartości zmiennej $id. Które z poleceń powinno być przypisane do zmiennej $zapytanie?
<?php ... $zapytanie = "..."; mysqli_query($db, $zapytanie); ... ?>
A.
UPDATE dane SET imie = '$a' WHERE id = $id;
B.
SELECT imie FROM dane WHERE id = $id;
C.
UPDATE dane SET imie = '$a';
D.
INSERT INTO dane (imie) VALUES ('$a');
Poprawne polecenie to UPDATE dane SET imie = '$a' WHERE id = $id;. Instrukcja UPDATE służy do modyfikowania istniejących rekordów w tabeli. Część SET imie = '$a' określa, że pole imie ma otrzymać wartość przechowywaną w zmiennej $a. Warunek WHERE id = $id ogranicza zmianę tylko do rekordu, którego klucz główny id ma wskazaną wartość. Schemat do zapamiętania to: UPDATE tabela SET kolumna = wartość WHERE warunek;. W praktyce brak warunku WHERE przy UPDATE jest częstą i groźną pomyłką, ponieważ może zmienić dane we wszystkich wierszach tabeli. Takie zapytanie wykonuje się przez mysqli_query($db, $zapytanie), czyli z poziomu PHP przekazuje się tekst SQL do serwera bazy danych.
W tym zadaniu trzeba rozróżnić operacje SQL: odczyt, dopisanie rekordu i modyfikację istniejących danych. Polecenie SELECT imie FROM dane WHERE id = $id; jedynie pobiera wartość pola imie z tabeli dane, więc byłoby trafne przy wyświetlaniu danych, a nie przy ich zmianie. Polecenie INSERT INTO dane (imie) VALUES ('$a'); dodaje nowy rekord do tabeli, ale nie modyfikuje istniejącego wiersza o podanym id. Polecenie UPDATE dane SET imie = '$a'; rzeczywiście zmienia pole imie, lecz bez warunku WHERE dotyczy wszystkich rekordów w tabeli dane, co zwykle prowadzi do uszkodzenia danych. Poprawne polecenie to UPDATE dane SET imie = '$a' WHERE id = $id;. Typowy błąd myślowy polega na skupieniu się tylko na fragmencie SET imie = '$a' i pominięciu warunku wskazującego konkretny rekord. Przy aktualizacji pojedynczego wiersza warunek WHERE jest niezbędny.