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()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:
{
$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>";
}
function list_products($mysqli)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.
{
$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();
}
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");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:
$mysqli = db_connect();
list_products($mysqli);
$low = 4;Allo stesso modo opero per sapere quante righe sono state modificate da un update statement:
$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 />";
}
$newPrice = 4.99;E questo é tutto. Facciamo giusto un reset dei dati, in modo da poter replicare l'esecuzione, e chiudiamo la connessione al database:
$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);
echo "<br>Resetting the product prices ...<br />";L'esecuzione del codice può essere vista qua.
$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);