|
Inserare „chirurgicala”
Daca ai parcurs prima parte a acestui tutorial ( VIII. PHP si MySQL, partea I ), ar trebui sa stii cum sa executi o interogare SELECT pentru a extrage un set de rezultate din baza de date. Totusi, poti de asemenea folosi API-ul MySQL al PHP pentru interogari ce nu returneaza un set de rezultate — de exemplu, o interogare INSERT sau UPDATE. Ai in vedere urmatorul exemplu, care demonstreaza acest lucru solicitand intrari utilizator printr-un formular, iar apoi inserand aceste informatii intr-o baza de date:
<html>
<head>
<basefont face="Arial">
</head>
<body>
<?php
if (!isset($_POST['submit'])) {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Tara: <input type="text" name="country">
Animal simbolic: <input type="text" name="animal">
<input type="submit" name="submit">
</form>
<?php
}
else {
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb";
$country = empty($_POST['country']) ? die
("EROARE: Completati tara!") : mysql_escape_string($_POST['country']);
$animal = empty($_POST['animal']) ? die ("EROARE: Completati
animalul simbolic"): mysql_escape_string($_POST['animal']);
$connection = mysql_connect($host, $user, $pass)
or die ("Nu ma pot conecta la serverul MySQL!");
mysql_select_db($db) or die ("Nu pot selecta baza de date!");
$query = "INSERT INTO symbols (country, animal)
VALUES ('$country', '$animal')";
$result = mysql_query($query) or die
("Interogarea contine o eroare: $query. ".mysql_error());
echo "A fost inserata inregistrarea cu ID-ul ".mysql_insert_id();
mysql_close($connection);
}
?>
</body>
</html>
Aici, utilizatorului i se ofera un formular care solicita introducerea unei tari si a animalului sau national.
Odata ce formularul a fost transmis, informatiile din acesta sunt folosite pentru a crea o interogare INSERT, care este apoi trimisa catre baza de date prin metoda mysql_query(). Din moment ce mysql_query() returneaza o valoare de tip Boolean, indicand daca interogarea s-a desfasurat cu succes sau nu, este posibila verificarea rezultatului instructiunii INSERT si returnarea unui mesaj adecvat.
In exemplul de mai sus apar doua noi functii. Functia mysql_escape_string() prelucreaza caracterele speciale (cum ar fi ghilimelele) din intrarile utilizator astfel incat acestea sa poata fi introduse cu succes in baza de date; pe de alta parte, mysql_insert_id() returneaza ID-ul generat de interogarea precedenta INSERT (fiind utila doar daca tabelul in care are loc inserarea contine un camp AUTO_INCREMENT). Ambele functii sunt de asemenea disponibile si in ext/mysqli.
Stergerea dintr-o tabela MySQL
Evident, acelasi lucru poate fi indeplinit si in cazul altor instructiuni de manipulare a datelor. Urmatorul exemplu iti demonstreaza cum sa folosesti instructiunea DELETE pentru a elimina selectiv elemente din tabel. Pentru diversitate, de aceasta data voi folosi ext/mysqli:
<html>
<head>
<basefont face="Arial">
</head>
<body>
<?php
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb";
$mysqli = new mysqli($host, $user, $pass, $db);
if (mysqli_connect_errno()) {
die("Nu ma pot conecta la serverul MySQL!");
}
if (isset($_GET['id'])) {
$query = "DELETE FROM symbols WHERE id = ".$_GET['id'];
if ($mysqli->query($query)) {
echo $mysqli->affected_rows." row(s) affected";
}
else {
echo "Interogarea contine o eroare: $query. ".$mysqli->error;
}
}
$query = "SELECT * FROM symbols";
if ($result = $mysqli->query($query)) {
if ($result->num_rows > 0) {
echo "<table cellpadding=10 border=1>";
while($row = $result->fetch_array()) {
echo "<tr>";
echo "<td>".$row[0]."</td>";
echo "<td>".$row[1]."</td>";
echo "<td>".$row[2]."</td>";
echo "<td><a href=".$_SERVER['PHP_SELF'].
"?id=".$row[0].">Sterge</a></td>";
echo "</tr>";
}
}
$result->close();
}
else {
echo "Interogarea contine o eroare: $query. ".$mysqli->error;
}
$mysqli->close();
?>
</body>
</html>
De remarcat faptul ca am folosit proprietatea affected_rows a obiectului mysqli, care returneaza numarul total de randuri ce au fost afectate de catre ultima operatie. Este valabila de asemenea si in ext/mysql , la fel ca si functia mysql_affected_rows().
|