[MySQL][PHP] Jak sprawdzić czy w bazie danych istnieje aktualnie dodawana treść?
Chcesz sprawdzić czy dodawane informacje znajdują się już w bazie danych i w zależności od tego czy w niej już są czy nie, podjąć odpowiednie decyzje i np. umieścić dane lub zaniechać ich dodawania.
W praktyce bardzo często będziesz spotykać się z sytuacją, gdy trzeba sprawdzić czy jakaś informacja już istnieje w bazie i dopiero po sprawdzeniu dodać do tabeli kolejne informacje lub je modyfikować.
Nie tylko zapobiega to dublowaniu informacji, ale również pozwala podejmować wiele innych decyzji na podstawie testu na istnienie określonych rekordów. Zobacz jak poradzić sobie z tym zagadnieniem.
Stwórzmy prostą tabelę o nazwie test w bazie danych o nazwie baza1:
CREATE TABLE test (
id INT NOT NULL PRIMARY KEY auto_increment,
tresc TEXT NOT NULL
);
Dwa pola - jedno z unikalnym identyfikatorem id, a drugie z dowolnym tekstem. Będziemy sprawdzać czy tekst już istnieje w bazie, a jeżeli nie istnieje dodawać go.
<?
$txt="Dowolna treść...";
$baza=mysql_connect("localhost", "user", "password"); //połączenie
mysql_select_db("baza1",$baza); //wybranie bazy danych
$wynik=mysql_query("SELECT * FROM test WHERE tresc='$txt'",$baza);
if (mysql_num_rows($wynik)>0) {
echo "Podany tekst już istnieje w bazie!";
}
if (mysql_num_rows($wynik)==0) {
mysql_query("INSERT INTO test (tresc) VALUES ('$txt')",$baza);
echo "Podany tekst został dopisany!";
}
mysql_close($baza);
?>
Zmienna $txt przechwouje dodawany i sprawdzany tekst. Może on pochodzić z formularza, innego wyniku z baz danych lub powstać po wykonaniu jakiegoś skryptu. Mamy w każdym razie jakiś tekst, nie ważne jest źródło jego pochodzenia.
Łączymy się z bazą i wykonujemy zapytanie SELECT, które wyszuka w polu tresc nasz tekst. Funkcja mysql_num_rows() podaje ilość rekordów zwróconych w ostatnim pytaniu SQL. Ponieważ pytaliśmy o rekordy zawierające tekst, dostaniemy w odpowiedzi 0 lub liczbę rekordów zawierających nasz przykładowy tekst.
Jeżeli dostaniemy w wyniku 0, to znaczy, że nie ma rekordów spełniających kryteria wyszukiwania, a więc nie ma tam szukanego tekstu ze zmiennej $txt. Możemy więc wstawić tekst poleceniem INSERT.
Jeżeli funkcja mysql_num_rows() zwróci 1 (lub więcej), to znaczy, że taki rekord już istnieje i w tym momencie nic nie robimy.
W prosty sposób udało się nam zrealizować akcję zależną od tego czy już istnieje wpis o podanej treści czy nie