Select, insert, delete

Un esempio un poco più funzionale, questa volta. Scriveremo del codice PHP per eliminare e inserire una riga nella nostra tabella, oltre che a leggere i dati con una select.

Prima cosa, trasformiamo le righe relative alla chiamata alla query per la select in una funzione a sé stante. Ci torna utile fare così perchè intendiamo vedere com'é la nostra tabella inizialmente, poi dopo una delete e infine dopo una insert.

La nostra funzione list_product() ha come parametro in input la connessione improved a mysql, e non da niente in output.

Esegue la select sulla tabella, la mostra all'utente, e ritorna. Piccola ma significativa aggiunta, quando finiamo di utilizzare il recordset ritornato dalla query, chiamamo il suo metodo free(), per ripulire la memoria. E' un passo che andrebbe sempre fatto, per evitare memory leak.
function list_products($mysqli)
{
// Create the query
$query = "SELECT sku, name, price FROM products ORDER BY name";
echo "<br />Performing a select: query(\"$query\") ... ";
if($rs = $mysqli->query($query))
echo "OK<br />";
else
die('Invalid query: ' . $mysqli->error());

echo "<br />List of available items:<br />";

// Iterate through the result set
while(list($sku, $name, $price) = $rs->fetch_row())
printf("(%s) %s: \$%s<br />", $sku, $name, $price);

// after a SELECT we should always cleanup the resultset, when done
$rs->free();
}
Il corpo del nostro script PHP comincia connettendoci a MySql, non cambia niente da quanto abbiamo già visto, ma riporto lo stesso il codice, per completezza.
// connect to the database server - notice the '@' to suppress warning
$mysqli = @new mysqli("host", "user", "password");
if(mysqli_connect_error())
die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
echo "Connection to MySql succeeded<br />";

echo "Selecting the current database schema: select_db() ... ";
$mysqli->select_db("test") or die($mysqli->error());
echo "OK<br />";
Abbiamo la nostra connessione, adesso per prima cosa visualizziamo il contenuto della nostra tabella (chiamando la funzione che abbiamo definito sopra), poi eliminiamo una riga, ovvero facciamo una query con DELETE, e quindi richiamamo la nostra funzione per vedere l'effetto sulla tabella.

Da notare l'accesso ad affected_rows, membro di mysqli, per vedere quante righe sono state effettivamente eliminate.

Da notare inoltre che non si deve chiamare free sull'output di query(), dato che non abbiamo eseguito una SELECT, e quindi non c'è nulla da ripulire.
// dump the product table
list_products($mysqli);

// deleting a row
echo "<br />Deleting an item ... ";
$mysqli->query("DELETE FROM products WHERE sku = 'TY232278'");
printf("%d row has been deleted.<br />", $mysqli->affected_rows);

// dump the product table after the delete
list_products($mysqli);
Ultimo passo: inseriamo una nuova riga, eseguendo una query con INSERT INTO, visualizziamo per l'ultima volta cosa c'é nella nostra tabella, e finalmente chiudiamo la nostra connessione a MySql.
// inserting a row
echo "<br />Inserting an item ... ";
$query = "INSERT INTO products (sku, name, price) VALUES ('TY232278', 'AquaSmooth Toothpaste', 2.26);";
$mysqli->query($query);
printf("%d row has been inserted.<br />", $mysqli->affected_rows);

// dump the product table after the insert
list_products($mysqli);

echo "<br />Closing the connection to MySql ... ";
if($mysqli->close())
echo "OK<br />";
else
echo "failed!<br />";
La pagina che esegue il codice sopra descritto é questa.

Nessun commento:

Posta un commento