Obsługa bazy MySQL w PHP

advertisement
Obsługa bazy MySQL w PHP
Funkcje połączenia i przetwarzania zapytań w bazie danych.
Połączenie z bazą danych w PHP odbywa sięga pomocą funkcji mysql_connect(), która przyjmuje trzy parametry i
jako wynik zwraca identyfikator połączenia:
$polaczenie = mysql_connect(host, użytkownik, hasło)
Funkcja mysql_connect() zwraca identyfikator połączenia, który jest drugim parametrem wywołania funkcji
wybierającej odpowiednią bazę danych mysql_select_db()
mysql_select_db(nazwa_bazy, $polaczenie)
Wykonywanie zapytań do bazy realizuje się za pomocą funkcji mysql_query()
$wynik = mysql_query(zapytanie_sql)
mysql_query() zwraca identyfikator wyniku (lub FALSE w przypadku niepowodzenia) jedynie dla zapytań typu
SELECT, SHOW, EXPLAIN i DESCRIBE. Dla innych zapytań SQL mysql_query() zwraca TRUE lub FALSE informując czy
zapytanie zakończyło się sukcesem czy też nie. Jeśli nie została zwrócona wartość FALSE to znaczy, że zapytanie było
prawidłowe i może być wykonane przez serwer. Nie mówi natomiast nic o liczbie przetworzonych lub zwróconych
wierszy. Jest również możliwe, że zapytanie zostanie wykonane poprawnie, nie przetwarzając lub zwracając żadnych
wierszy.
Zwrócone wiersze można odczytać przy pomocy funkcji:
$wiersz = mysql_fetch_row($wynik)
lub
$wiersz = mysql_fetch_assoc($wynik)
lub
$wiersz = mysql_fetch_array($wynik)
Funcja mysql_fetch_row() zwraca wynik w postaci tablicy numerycznej, gdzie $wiersz[0] oznacza 1 zwrócone pole.
Funkcja mysql_fetch_assoc() zwraca wiersz w postaci tablicy asocjacyjnej, w której klucze są nazwami pól w bazie
np.: wiersz[‘pesel’]. W przypadku funkcji mysql_fetch_array(), która jest najbardziej uniwersalna zwrócona tabela
może być typu numerycznego, asocjacyjnego bądź obiema jednocześnie (domyślnie). Można zastosować opcjonalny
drugi argument, który jest stałą i może przyjmować następujące wartości: MYSQL_ASSOC, MYSQL_NUM i
MYSQL_BOTH. Wartością domyślną jest MYSQL_BOTH.W przypadku gdy zapytanie zwraca kilka wierszy funkcje
należy wywoływać w pętli dopóki zmienna wiersz przyjmuje wartość inną niż FALSE.
Do zamknięcia połączenia z bazą służy funkcja
mysql_close($polaczenie)
Uwaga: w celu zbadania poprawności wykonania funkcji bazodanowych często korzysta się z konstrukcji or die()
występującej zaraz po niej, która w przypadku niepowodzenia (zwrócenia wyniku FASLE) wypisze stosowny
komunikat i zatrzyma wykonywanie skryptu.
Wyświetlanie danych z bazy
Poniższy przykład wyświetla zawartość tabeli „osoby” z bazy na lokalnym serwerze (nazwa użytkownika i hasło są
domyślnymi ustawieniami mysql dla easyphp i xampp)
Przykład 1.
<?php
$polaczenie=mysql_connect("localhost", "root", "") or die("Brak połączenia z serwerem MySQL");
mysql_select_db("baza", $polaczenie) or die ("Błąd wyboru bazy danych");
$wynik=mysql_query("SELECT * FROM osoby") or die("Błąd zapytania");
while($wiersz = mysql_fetch_assoc($wynik))
{
print "Imie: " . $wiersz['imie'] . "<br>";
print "Nazwisko: " . $wiersz['nazwisko'] . "<br>";
print "Pesel: " . $wiersz['pesel'] . "<hr>";
}
mysql_close($polaczenie);
?>
Dodawanie danych do bazy
Utwórzmy prosty formularz oraz skrypt PHP przetwarzający go w tej samej podstronie:
Przykład 2. Formularz i skrypt obsługujący dodawanie danych do bazy
<h1>Dodaj rekord </h1>
<form method="POST">
Imię: <input type="text" id="imie" name="imie"/><br/>
Nazwisko: <input type="text" id="nazwisko" name="nazwisko"/><br/>
Pesel: <input type="text" id="pesel" name="pesel"/><br/>
<input type="submit" value="dodaj" />
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$imie = $_POST['imie'];
$nazwisko = $_POST['nazwisko'];
$pesel = $_POST['pesel'];
$polaczenie = mysql_connect("localhost", "root", "") or die("Błąd połączenia z bazą!");
mysql_select_db("baza") or die("Nie można wybrać bazy!");
$query = "INSERT INTO osoby(imie, nazwisko, pesel) VALUES ('$imie', '$nazwisko', '$pesel')";
$wynik = mysql_query($query) or die("Błąd zapytania SQL!");
if($wynik) echo "Rekord dodany poprawnie";
mysql_close($polaczenie);
}
?>
Sprawdzanie poprawności wprowadzonych danych
Do sprawdzenia poprawności wprowadzonych danych można zastosować skrypt po stronie klienta, który
zapobiegnie wysłania formularza z błędnymi danymi. Oczywiście to samo da się osiągnąć po stronie serwera jednak
będzie to wymagało przesłania formularza i powrotu do niego oraz konieczności ponownego wpisywania danych.
Żeby sprawdzić dane po stronie klienta wystarczy dodać zdarzenie onsubmit="return sprawdz();" w znaczniku form i
napisać odpowiednią funkcję sprawdz(). Funkcja powinna zwrócić wynik true jeśli walidacja przebiegnie pomyślnie i
false w przeciwnym przypadku, co zapobiegnie wysłaniu formularza.
Przykład 3. Skrypt sprawdzający poprawność wprowadzonych danych (JS)
<script>
function sprawdz() {
imie = document.getElementById('imie').value;
nazwisko = document.getElementById('nazwisko').value;
pesel = document.getElementById('pesel').value;
if(imie.length<3 || nazwisko.length<3 || pesel.length !=11 || isNaN(pesel)) {
alert("Błędne dane: Imie i Nazwisko muszą mieć min. 3 znaki, pesel musi być liczbą 11 cyfrową!");
return false;
}
return true;
}
</script>
Usuwanie danych z bazy
Przykład 4. Formularz i skrypt obsługujący usuwanie rekordu z bazy o danym numerze pesel
<h1>Usuń rekord</h1>
<form method="POST" >
<p>Pesel: <input type="text" name="pesel" /> </p>
<input type="submit" value="Usuń" />
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$polaczenie= mysql_connect("localhost", "root", "") or die("Błąd połączenia z bazą!");
mysql_select_db("baza") or die("Nie można wybrać bazy!");
$pesel = $_POST['pesel'];
$query = "DELETE FROM osoby WHERE pesel='$pesel'";
$wynik = mysql_query($query) or die("Błąd zapytania SQL!");
if ($wynik && mysql_affected_rows())
echo "Rekord usunięty poprawnie";
else
echo "Błąd operacji";
mysql_close($polaczenie);
}
?>
Ćwiczenia i zadania
Zadanie 1. Napisz skrypt który wyświetli dane z tabeli osoby w bloku treści w postaci listy imion i nazwisk oraz liczbę
rekordów w stopce.
Rozwiązanie: (Dla przejrzystości pominięto sprawdzanie poprawności za pomocą konstrukcji or die())
<body>
<?php
$polaczenie=mysql_connect("localhost", "root", "");
mysql_select_db("baza", $polaczenie);
?>
<div id="baner">
</div>
<div id="menu">
</div>
<div id="tresc">
<ol>
<?php
$wynik=mysql_query("SELECT imie, nazwisko FROM osoby");
while($wiersz = mysql_fetch_array($wynik))
{
echo '<li>' . $wiersz['imie'] . ' ' . $wiersz['nazwisko'] . '</li>';
}
?>
</ol>
</div>
<div id="stopka">
Liczba rekordow:
<?php
$wynik=mysql_query("SELECT count(*) FROM osoby");
$wiersz = mysql_fetch_array($wynik);
echo $wiersz[0];
?>
</div>
<?php
mysql_close($polaczenie);
?>
</body>
Download