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.

  • ???? Collegamento: mysqli_connect apre un collegamento al MySQL server, e mysqli_select_db sceglie il database con cui lavorare.
  • ๐Ÿ—ƒ๏ธ Esecuzione delle query: La query mysqli esegue le istruzioni INSERT, SELECT, UPDATE e DELETE sul database selezionato.
  • ๐Ÿ“„ Risultati della lettura: La funzione mysqli_num_rows conta le righe restituite, mentre mysqli_fetch_array legge ogni riga e la inserisce in un array per la successiva visualizzazione.
  • ๐Ÿ”„ CRUDELE Operazioni: Complessivamente, queste funzioni creano, leggono, aggiornano ed eliminano i record, ovvero le quattro operazioni fondamentali di un database.
  • ๐Ÿ›ก๏ธ Dichiarazioni preparate: A differenza della creazione di query tramite concatenazione di input utente, l'associazione di valori con istruzioni preparate impedisce le iniezioni SQL.
  • ๐Ÿงฉ PDO e ODBC: PDO offre un'interfaccia unica per molti motori di database, mentre ODBC si connette a fonti come Microsoft Accesso.
  • ๐Ÿค– Assistenza AI: Gli strumenti di intelligenza artificiale possono convertire il codice MySQLi legacy in PDO con istruzioni preparate ed eseguire il debug degli errori di connessione.

PHP MySQL Accesso al database

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.

PHP: MySQL funzioni

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

DOMANDE FREQUENTI

mysqli funziona solo con MySQL e offre sia stili procedurali che a oggetti. PDO funziona con molti database tramite un'unica interfaccia e supporta i segnaposto denominati. Entrambi supportano le istruzioni preparate; PDO รจ piรน portabile tra i vari motori.

No. L'estensione originale mysql_* รจ stata rimossa in PHP 7. Utilizza mysqli o PDO al suo posto. Entrambe sono attivamente mantenute, supportano le istruzioni preparate e proteggono dai rischi di injection della vecchia estensione.

Intercetta l'errore e mostra all'utente un messaggio generico, registrando i dettagli in privato. Non visualizzare l'output di `mysqli_error` ai visitatori, poichรฉ potrebbe rivelare nomi e struttura delle tabelle utili a un malintenzionato.

Sรฌ. Incolla lo script mysqli e l'IA puรฒ riscriverlo usando PDO, sostituire le query concatenate con parametri associati e aggiungere la gestione degli errori tramite try-catch. RevVisualizza i segnaposto e testa ogni query in seguito.

Sรฌ. Condividi l'errore e il codice di connessione, e l'IA sarร  in grado di individuare credenziali errate, un host o una porta non corretti, un database mancante o un driver disabilitato, per poi suggerire le impostazioni corrette da provare.

Riassumi questo post con: