Fetch

Una volta fatta una SELECT, occorre fare una fetch, ovvero estrarre dal risultato della query una riga, per poterla trattare.

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