affected_rows

Un paio di cosette in questo post.

Per prima cosa, esternalizziamo la connessione/disconnessione al database. E' una seccatura riscrivere lo stesso codice tutte le volte, conviene piazzarlo in un altro file php e richiamarlo in ogni file php che richiede una connessione a mysql.

Avremo perciò un file php (qualcosa come mysql_utilities.php) che avrà al suo interno definite, come codice php, queste due funzioni:
function db_connect()
{
$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 />";

return $mysqli;
}

function db_close($mysqli)
{
echo "<p>Closing the connection to MySql ... ";
if($mysqli->close())
echo "OK</p>";
else
echo "failed!</p>";
}
Già che ci siamo, mettiamo pure sempre in questo file anche una funzioncina che ci fa l'output dei dati nella tabella products, visto che é una funzionalità che tendiamo ad usare piuttosto spesso:
function list_products($mysqli)
{
$query = "SELECT sku, name, price FROM products";
if(($rs = $mysqli->query($query)) == false)
die('Invalid query: ' . $mysqli->error());

echo "<br />List of product items:<br />";
while($row = $rs->fetch_object())
printf("(%s) %s: \$%s<br />", $row->sku, $row->name, $row->price);
$rs->free();
}
Sistemati questi dettagli implementativi, passiamo a considerare il vero punto di questo post: l'uso di affected_rows di mysqli per vedere quante righe della tabella siano state coinvolte dallo statement sql appena esequito.

Quello che facciamo nel nostro nuovo file é, in primo luogo, la solita inizializzazione del database, che questa volta é molto più veloce del solito, grazie al fatto che deleghiamo le funzionalità al file php che abbiamo definito sopra. In pratica dichiariamo in che file andare a trovare le funzionalità esternalizzate, ci connettiamo al database, visualizziamo i dati presenti sulla tabella products:
require_once("mysql_utilities.php");

$mysqli = db_connect();
list_products($mysqli);
Ora facciamo una select, e mostriamo all'utente quante righe sono state selezionate, usando per l'appunto il valore di affected_rows, prima di mostrare il codice identificativo e il nome del prodotto:
$low = 4;
$query = "SELECT sku, name FROM products WHERE price < $low"; $result = $mysqli->query($query);
echo "<br />There are $mysqli->affected_rows product(s) priced less than €$low:<br />";
for($i = 0; $i < $mysqli->affected_rows; ++$i)
{
$row = $result->fetch_object();
echo "product ($row->sku) $row->name<br />";
}
Allo stesso modo opero per sapere quante righe sono state modificate da un update statement:
  $newPrice = 4.99;
$query = "UPDATE products SET price = $newPrice WHERE price < $low"; $result = $mysqli->query($query);
echo "<br />Price updated at $newPrice for $mysqli->affected_rows product(s)<br />";
list_products($mysqli);
E questo é tutto. Facciamo giusto un reset dei dati, in modo da poter replicare l'esecuzione, e chiudiamo la connessione al database:
echo "<br>Resetting the product prices ...<br />";
$query = "UPDATE products SET price = 2.99 WHERE sku = 'PO988932'";
$mysqli->query($query);

$query = "UPDATE products SET price = 3.99 WHERE sku = 'TY232278'";
$mysqli->query($query);
list_products($mysqli);

db_close($mysqli);
L'esecuzione del codice può essere vista qua.

Nessun commento:

Posta un commento