L'estensione mysqli - II

Altre funzioni di ext/mysqli

Prima di concludere questo articolo elenchiamo alcune funzioni messe a disposizione dall'estensione ext/mysqli che risultano estremamente utili e di uso comune. La maggior parte di queste comunque era già disponibile con la vecchia estensione ext/mysql ma risulta comunque interessante analizzare il loro utilizzo in un approccio orientato agli oggetti.

 

mysqli::affected_rows
(mysqli_affected_rows)

Restituisce il numero di righe interessate dall'ultima query. affected_rows va usato solo quando la query modifica il contenuto del database, come nel caso di INSERT, UPDATE e DELETE e non deve essere impiegato con le SELECT. Nel caso di una query di tipo UPDATE affected_rows restituisce il numero di righe realmente modificate e non il numero di righe che rispondono alla clausola WHERE della query stessa. Questo comportamento può essere modificato agendo sui parametri di connessione come mostrato all'inizio di questo articolo.

 

<?php 
// provo a connettermi al server MySQL
$mysqli = new mysqli('localhost', 'root', 'password_db', 'test');

// preparo le query di inserimento
$query = "INSERT INTO mia_tabella SET nome = 'Gianni', cognome = 'Rossi'";

// eseguo le query
$mysqli->multi_query($query);

// mostro il numero delle righe interessate dall'ultima query
echo 'Numero di righe inserite: ', $mysqli->affected_rows , '<br />';

// preparo le query di cancellazione
$query = "DELETE FROM mia_tabella WHERE nome = 'Gianni'";

// eseguo le query
$mysqli->multi_query($query);

// mostro il numero delle righe interessate dall'ultima query
echo 'Numero di righe cancellate: ', $mysqli->affected_rows;

// chiudo la connessione al server MySQL
$mysqli->close();
?>

 

mysqli_connect_error e mysqli_connect_errno

Forniscono rispettivamente un messaggio di errore ed un relativo codice numerico associato nel caso in cui la connessione al server MySQL non abbia avuto esito positivo. In particolare mysqli_connect_errno() può essere impiegato per verificare l'esito della connessione semplicemente con un IF.

 

<?php 
// provo a connettermi al server MySQL
$mysqli = new mysqli('localhost', 'root', 'password_db', 'test');

// Verifico l'esito della connessione
if (mysqli_connect_errno())
{
	printf("Connessione fallita: %s\n", mysqli_connect_error());
	exit();
}
?>

 

mysqli_result::data_seek
(mysqli_data_seek)

Nel caso di query buffered permette di posizionarsi su una qualsiasi delle righe restituite dalla query

 

<?php 
// provo a connettermi al server MySQL
$mysqli = new mysqli('localhost', 'root', 'password_db', 'test');

// preparo le query da inviare al server MySQL
$query = "SELECT * FROM mia_tabella";

// eseguo le query
$result = $mysqli->query($query);

// sposto il puntatore dei risultati alla terza riga
$result->data_seek(2);

// estraggo la riga
$row = $result->fetch_row();

// mostro i risultati
printf ("ID utente:%d, nome:%s, cognome:%s<br />\n",$row[0],$row[1],$row[2]);

// chiudo la connessione al server MySQL
$mysqli->close();
?>

 

mysqli::error e mysqli::errno
(mysqli_errno e mysqli_error)

Forniscono rispettivamente un messaggio di errore ed un relativo codice numerico associati all'ultimo errore verificatosi nell'interazione con il database MySQL. Utili per effettuare il debug delle query

 

<?php 
// provo a connettermi al server MySQL
$mysqli = new mysqli('localhost', 'root', 'password_db', 'test');

// eseguo le query
if(!$mysqli->query("SELECT * FROM tabella_inesistente"))
{
	printf('Errore nella query (codice %d): %s', $mysqli->errno,$mysqli->error);
}
?>

 

mysqli_result::field_count
( mysqli_field_count)

Permette di sapere quanti campi (colonne) contiene un set di risultati. Particolarmente utile quando viene eseguito il metodo store_result() e non è noto a priori se la query restituirà dei risultati (es. una SELECT) o meno (INSER, UPDATE, ...)

 

<form id="form1" name="form1" method="post" action=""> 
<label>Inserisci una query: 
<input name="query" type="text" size="50" /> 
</label> 
<input type="submit" name="Submit" value="&lt;- Esegui" /> 
</form> 
<?php 
if($_POST)
{
	// provo a connettermi al server MySQL
	$mysqli = new mysqli('localhost', 'root', 'password_db', 'test');

	// eseguo le query
	$result = $mysqli->real_query($_POST['query']);

	// se la query ha prodotto un risultato
	if($mysqli->field_count)
	{
		$result = $mysqli->store_result();

		while ($row = $result->fetch_assoc())
		{
			foreach ($row as $key => $value)
			{
				echo "$key=>$value ";
			}
			echo '<br />';
		}
	}
}
?>

 

mysqli::insert_id
(mysqli_insert_id)

Fornisce l'ultimo ID autogenerato da MySQL per un campo auto_increment.

 

<?php 
// provo a connettermi al server MySQL
$mysqli = new mysqli('localhost', 'root', 'password_db', 'test');

// eseguo le query
$result = $mysqli->query("INSERT INTO mia_tabella SET nome='Gigi', cognome='Cremeria'");

echo "L'ID del nuovo utente inserito è ", $mysqli->insert_id;
?>

 

mysqli::more_results
( mysqli_more_results)

Nel caso di query multiple restituisce true se sono presenti ulteriori set di risultati provenienti da una precedente chiamata alla funzione multi_query(). Utile quando non si conosce a priori il numero delle query eseguite con una multi_query() e pertanto non è noto il numero di set di risultati da elaborare.

 

Nel prossimo articolo, che concluderà la serie dedicata a ext/mysqli, vedremo come sfruttare i prepared statements per ottenere il binding dei parametri e dei risultati, come effettuare le transazioni e come gestire i BLOB.

Pagine: precedente 1 2 3 4 5

1 commento

1 david david domenica 26 aprile 2009, ore 18:33
Ottimo
Effettua l'accesso o registrati per inserire un commento