PHP MySQLi Funzioni: mysqli_query e mysqli_connect
⚡ Riepilogo intelligente
MySQLI metodi di accesso ai database di mysqli, PHP e altri, consentono a uno script PHP di connettersi a un database, eseguire query e leggere i risultati. Questa guida illustra le funzioni principali di mysqli, esempi completi di operazioni CRUD, istruzioni preparate per la sicurezza e i metodi di accesso alternativi PDO e ODBC.

PHP ha una ricca collezione di funzioni integrate per manipolare MySQL banche dati.
Funzione PHP mysqli_connect
La funzione PHP mysqli_connect viene utilizzata per connettersi a un MySQL server della banca dati.
La sintassi è la seguente.
<?php $db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password); ?>
QUI,
- "$db_handle" è la variabile della risorsa di connessione al database.
- “mysqli_connect(…)” è la funzione per la connessione al database PHP
- “$db_server_name” è il nome o l’indirizzo IP del server che ospita il MySQL server.
- “$db_user_name” è un nome utente valido nel MySQL server.
- “$db_password” è una password valida associata a un nome utente nel MySQL server.
Funzione PHP mysqli_select_db
La funzione mysqli_select_db viene utilizzata per selezionare un database.
La sintassi è la seguente.
<?php mysqli_select_db($db_handle, $database_name); ?>
QUI,
- “mysqli_select_db(…)” è la funzione di selezione del database che restituisce true o false
- "$db_handle" è il link di connessione al server
- “$database_name” è il nome del database
Funzione PHP mysqli_query
La funzione mysqli_query viene utilizzata per l'esecuzione SQL interrogazioni.
La funzione può essere utilizzata per eseguire i seguenti tipi di query:
- inserire
- Seleziona
- Aggiornanento
- Elimina
La sintassi è la seguente.
<?php mysqli_query($db_handle, $query); ?>
QUI,
- “mysqli_query(…)” è la funzione che esegue le query SQL.
- "$db_handle" è il link di connessione al server
- “$query” è la query SQL da eseguire
Funzione PHP mysqli_num_rows
La funzione mysqli_num_rows viene utilizzata per ottenere il numero di righe restituite da una query di selezione.
La sintassi è la seguente.
<?php mysqli_num_rows($result); ?>
QUI,
- “mysqli_num_rows(…)” è la funzione di conteggio delle righe
- "$result" è il set di risultati mysqli_query
Funzione PHP mysqli_fetch_array
La funzione mysqli_fetch_array viene utilizzata per recuperare array di righe dal set di risultati di una query.
La sintassi è la seguente.
<?php mysqli_fetch_array($result); ?>
QUI,
- “mysqli_fetch_array(…)” è la funzione per recuperare gli array di righe
- "$risultato" è il risultato restituito dalla funzione mysqli_query.
Funzione PHP mysqli_close
La funzione mysqli_close viene utilizzata per chiudere una connessione al database aperta.
La sintassi è la seguente.
<?php mysqli_close($db_handle); ?>
QUI,
- “mysqli_close(…)” è la funzione PHP che chiude la connessione
- "$db_handle" è la risorsa di connessione al server.
PHP MySQL Esempi CRUD
Vediamo alcuni esempi pratici che sfruttano queste funzioni. Questo tutorial presuppone la conoscenza di MySQL e SQL; se questi termini non ti sono familiari, consulta la nostra MySQL ed esercitazioni SQL.
Creeremo un semplice database chiamato my_personal_contacts con una sola tabella. Connettiti a MySQL utilizzando il tuo strumento di accesso preferito come MySQL Utilizzando Workbench o phpMyAdmin, crea un database chiamato my_personal_contacts, quindi esegui lo script mostrato di seguito per creare la tabella e inserire alcuni dati di esempio.
CREATE TABLE IF NOT EXISTS `my_contacts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `full_names` varchar(255) NOT NULL, `gender` varchar(6) NOT NULL, `contact_no` varchar(75) NOT NULL, `email` varchar(255) NOT NULL, `city` varchar(255) NOT NULL, `country` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `my_contacts` (`id`, `full_names`, `gender`, `contact_no`, `email`, `city`, `country`) VALUES (1, 'Zeus', 'Male', '111', 'zeus@olympus.mt.co', 'Agos', 'Greece'), (2, 'Anthena', 'Female', '123', 'anthena@olympus.mt.co', 'Athens', 'Greece'), (3, 'Jupiter', 'Male', '783', 'jupiter@planet.pt.co', 'Rome', 'Italy'), (4, 'Venus', 'Female', '987', 'venus@planet.pt.co', 'Mars', 'Italy');
Lettura dei record dal database
Ora creeremo un programma che stamperà i record dal database.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "SELECT * FROM my_contacts"; // SQL select query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Database access failed: " . mysqli_error($dbh)); $rows = mysqli_num_rows($result); // get number of rows returned if ($rows) { while ($row = mysqli_fetch_array($result)) { echo 'ID: ' . $row['id'] . '<br>'; echo 'Full Names: ' . $row['full_names'] . '<br>'; echo 'Gender: ' . $row['gender'] . '<br>'; echo 'Contact No: ' . $row['contact_no'] . '<br>'; echo 'Email: ' . $row['email'] . '<br>'; echo 'City: ' . $row['city'] . '<br>'; echo 'Country: ' . $row['country'] . '<br><br>'; } } mysqli_close($dbh); // close the database connection ?>
L'esecuzione del codice sopra riportato restituisce i risultati mostrati nel diagramma sottostante.
Inserimento di nuovi record
Vediamo ora un esempio che aggiunge un nuovo record alla nostra tabella. Il codice seguente mostra l'implementazione.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "INSERT INTO `my_contacts` (`full_names`,`gender`,`contact_no`,`email`,`city`,`country`)"; $sql_stmt .= " VALUES(7,8,9,10,11,12)"; $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Adding record failed: " . mysqli_error($dbh)); echo "Poseidon has been successfully added to your contacts list"; mysqli_close($dbh); // close the database connection ?>
Eseguendo il codice sopra riportato, verrà visualizzato il messaggio "Poseidon è stato aggiunto correttamente alla tua lista contatti". Torna all'esempio della query di selezione e recupera nuovamente i tuoi contatti per verificare se Poseidon è stato aggiunto alla tua lista.
Aggiornamento dei record
Vediamo ora un esempio di aggiornamento di un record nel database. Supponiamo che Poseidone abbia cambiato il suo numero di telefono e il suo indirizzo email.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "UPDATE `my_contacts` SET `contact_no` = 8, `email` = 9"; $sql_stmt .= " WHERE `id` = 5"; // SQL update query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Updating record failed: " . mysqli_error($dbh)); echo "ID number 5 has been successfully updated"; mysqli_close($dbh); // close the database connection ?>
Eliminare i record
Vediamo ora un esempio che rimuove i record dal database. Supponiamo che Venus abbia un ordine restrittivo nei nostri confronti e che dobbiamo rimuovere le sue informazioni di contatto dal nostro banca dati.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $id = 4; // Venus's ID in the database $sql_stmt = "DELETE FROM `my_contacts` WHERE `id` = $id"; // SQL delete query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Deleting record failed: " . mysqli_error($dbh)); echo "ID number $id has been successfully deleted"; mysqli_close($dbh); // close the database connection ?>
Prevenire le SQL Injection con le Prepared Statements
Gli esempi CRUD sopra riportati costruiscono le query concatenando stringhe. Quando una qualsiasi parte di una query proviene dall'input dell'utente, si apre la porta all'SQL injection. Le istruzioni preparate risolvono questo problema inviando la query e i dati separatamente, in modo che l'input non possa mai modificare la struttura della query.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); $stmt = mysqli_prepare($dbh, "INSERT INTO my_contacts (full_names, email) VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, "ss", $name, $email); $name = 'Poseidon'; $email = 'poseidon@sea.oc'; mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); mysqli_close($dbh); ?>
Qui i punti interrogativi sono segnaposto e `bind_param` associa in modo sicuro i valori di nome ed email. Il database li tratta rigorosamente come dati, motivo per cui le istruzioni preparate, disponibili sia in mysqli che in PDO, sono il metodo consigliato per eseguire qualsiasi query che utilizzi input utente.
Oggetto di accesso ai dati PHP (PDO)
PDO è una classe che ci permette di manipolare diversi motori di database come MySQL, PostgreSQLe MS SQL Server utilizzando la stessa interfaccia.
Il codice seguente mostra il metodo di accesso al database utilizzando l'oggetto PDO.
Nota: il codice seguente presuppone la conoscenza del linguaggio SQL, degli array, della gestione delle eccezioni e del ciclo foreach.
<?php try { $pdo = new PDO("mysql:host=localhost;dbname=my_personal_contacts", 'root', 'melody'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('SET NAMES "utf8"'); $sql_stmt = "SELECT * FROM `my_contacts`"; $result = $pdo->query($sql_stmt); $result->setFetchMode(PDO::FETCH_ASSOC); $data = array(); foreach ($result as $row) { $data[] = $row; } print_r($data); } catch (PDOException $e) { echo $e->getMessage(); } ?>
QUI,
- “try{…}catch{…}” è il blocco di gestione delle eccezioni
- “$pdo = new PDO(“mysql…” crea un'istanza dell'oggetto PDO e passa il driver del database, i nomi del server e del database, l'ID utente e la password.
- “$pdo->setAttribute…” imposta la modalità di errore PDO per generare eccezioni
- “$pdo->exec('SET NAMES…” imposta il formato di codifica
Accesso ai dati ODBC in PHP
ODBC è l'acronimo di Open Database Connectivity. La sua sintassi di base è la seguente.
<?php $conn = odbc_connect($dsn, $user_name, $password); ?>
QUI,
- “odbc_connect” è la funzione integrata di PHP
- "$dsn" è il nome dell'origine dati ODBC.
- "$user_name" è facoltativo e viene utilizzato per il nome utente ODBC.
- “$password” è facoltativo e viene utilizzato per la password ODBC.
L'esempio seguente presuppone che tu stia utilizzando Windows e hanno creato un collegamento ODBC a Northwind Microsoft Accedere al database denominato northwind.
<?php $dbh = odbc_connect('northwind', '', ''); if (!$dbh) { exit("Connection Failed: " . $dbh); } $sql_stmt = "SELECT * FROM customers"; $result = odbc_exec($dbh, $sql_stmt); if (!$result) { exit("Error accessing records"); } while (odbc_fetch_row($result)) { $company_name = odbc_result($result, "CompanyName"); $contact_name = odbc_result($result, "ContactName"); echo "<b>Company Name (Contact Person):</b> $company_name ($contact_name) <br>"; } odbc_close($dbh); ?>

