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); ?>

