Negli esempi cha abbiamo fatto nei post precedenti abbiamo usato la fetch_row(), ma esistono altri metodi equivalenti da usarsi sul resultset ottenuto da una SELECT: fetch_object() e fetch_array().
Riscriviamo la nostra paginetta php per vedere questi diversi metodi in azione.
Prima cosa, estraiamo la SELECT in una funzione a se stante. Se la SELECT funziona correttamente, ritorniamo il resultset ottenuto, altrimenti, segnalaliamo l'errore e chiudiamo qua i giochi:
function select_products($mysqli)
{
$query = "SELECT sku, name, price FROM products ORDER BY name";
if($rs = $mysqli->query($query))
return $rs;
else
die('Invalid query: ' . $mysqli->error());
}
La list_products_fetch_row() visualizza i dati ottenuti dalla SELECT come avevamo già visto fare in precedenza. Niente da aggiungere, direi:
function list_products_fetch_row($mysqli)
{
$rs = select_products($mysqli);
echo "<br />List of available items through fetch_row():<br />";
while(list($sku, $name, $price) = $rs->fetch_row())
printf("(%s) %s: \$%s<br />", $sku, $name, $price);
$rs->free();
}
list_products_fetch_object() usa fetch_object(), ritorna un puntatore ad un oggetto i cui membri data sono delle variabili il cui nome é quello delle colonne selezionate dalla SELECT:
function list_products_fetch_object($mysqli)
{
$rs = select_products($mysqli);
echo "<br />List of available items through fetch_object():<br />";
while(($row = $rs->fetch_object()))
printf("(%s) %s: \$%s<br />", $row->sku, $row->name, $row->price);
$rs->free();
}
list_products_fetch_array_assoc() usa fetch_array() per MYSQLI_ASSOC, ritorna un array di elementi, ognuno dei quali é indicizzato dal nome della colonna SQL selezionata dalla SELECT:
function list_products_fetch_array_assoc($mysqli)
{
$rs = select_products($mysqli);
echo "<br />List of available items through fetch_array(MYSQLI_ASSOC):<br />";
while(($row = $rs->fetch_array(MYSQLI_ASSOC)))
printf("(%s) %s: \$%s<br />", $row['sku'], $row['name'], $row['price']);
$rs->free();
}
list_products_fetch_array_num() usa anch'essa fetch_array() ma per MYSQLI_NUM, e quindi l'array risultante viene indicizzato dal numero (0, 1, ...) di riferimento della colonna selezionata:
function list_products_fetch_array_num($mysqli)
{
$rs = select_products($mysqli);
echo "<br />List of available items through fetch_array(MYSQLI_NUM):<br />";
while(($row = $rs->fetch_array(MYSQLI_NUM)))
printf("(%s) %s: \$%s<br />", $row[0], $row[1], $row[2]);
$rs->free();
}
Poco cambia nel resto del codice php, mi connetto a MySql, faccio le mie SELECT e mi disconnetto.
$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 />";
// dump the product table
list_products_fetch_row($mysqli);
list_products_fetch_object($mysqli);
list_products_fetch_array_assoc($mysqli);
list_products_fetch_array_num($mysqli);
echo "<br />Closing the connection to MySql ... ";
if($mysqli->close())
echo "OK<br />";
else
echo "failed!<br />";
Quanto sopra può essere visto qui in azione.
Nessun commento:
Posta un commento