Scripts et Programmation

PHP - Passer de mysql à mysqli, requêtes de base

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction



Depuis PHP 5.4, l'extension MySQL originale est obsolète, et génèrera des alertes de niveau E_DEPRECATED lors de la connexion à une base de données. A la place, on peut utiliser l'extension MySQLi ou l'extension PDO_MySQL.

Si comme moi, vous avez des sites avec l'extension MySQL, voici des petits exemples pour passer de MySQL à MySQLi (que je trouve plus simple d'emploi sur mes petites créations).


Connexion à la base



Auparavant, avec MySQL, se connecter à la base de données se faisait ainsi :

Code PHP :
 
// on se connecte à MySQL
$conn = mysql_connect('$host', '$user', '$passwd');
 
// on sélectionne la base
mysql_select_db('mabase',$conn);


Maintenant, avec MySQLi, on utilise :

Code PHP :
// on se connecte à MySQL et on sélectionne la base
$conn = mysqli_connect('$host', '$user', '$passwd', 'mabase');



Les requêtes




SELECT



Exemple de requête SELECT et affichage des résultats dans un tableau :

Code PHP :
// On créé la requête
$req = "SELECT * FROM table1";
 
// on envoie la requête
$res = mysql_query($req);
 
// on va scanner tous les tuples un par un
echo "<table>";
while ($data = mysql_fetch_assoc($res)) {
    // on affiche les résultats
    echo "<tr><td>".$data['id']."</td><td>".$data['texte']."</td></tr>";
}
echo "</table>";
 


Maintenant, avec MySQLi, cela donne :

Code PHP :
// On créé la requête
$req = "SELECT * FROM table1";
 
// on envoie la requête
$res = $conn->query($req);
 
// on va scanner tous les tuples un par un
echo "<table>";
while ($data = mysqli_fetch_array($res)) {
    // on affiche les résultats
    echo "<tr><td>".$data['id']."</td><td>".$data['texte']."</td></tr>";
}
echo "</table>";



INSERT



Avec MySQL, on utilisait :

Code PHP :
// On créé la requête
$req = "INSERT INTO table1(texte) VALUES ('Du texte')";
 
// on envoie la requête
$res = mysql_query($req);


Avec MySQLI, cet exemple devient :

Code PHP :
// On créé la requête
$req = "INSERT INTO table1(texte) VALUES ('Du texte mysqli')";
 
// on envoie la requête
$res = $conn->query($req);



DELETE



De la même façon que le insert, le DELETE avec MySQL :

Code PHP :
// On créé la requête
$req = "DELETE FROM table1 WHERE texte='Du texte'";
 
// on envoie la requête
$res = mysql_query($req);


Qui devient avec MySQLi :

Code PHP :
// On créé la requête
$req = "DELETE FROM table1 WHERE texte='Du texte mysqli'";
 
// on envoie la requête
$res = $conn->query($req);



UPDATE



A venir


Fermer la connexion



Avec MySQL, clore la connexion à la base :

Code PHP :
// on ferme la connexion
mysql_close();


Et bien, avec MySQLi, cela devient :

Code PHP :
// on ferme la connexion
mysqli_close($conn);



Divers MySQLi




Se protéger des injections SQL



Toute requête qui fait intervenir des variables est à protéger d'éventuelles injections SQL.
Voici comment s'en prémunir avec MySQLi :

Code PHP :
// Se protéger des injections SQL
$username = mysqli_real_escape_string($_GET['username']);
$conn->query("SELECT * FROM users WHERE username = '$username'");



Requête préparée



Voici un exemple de requête à trous, préparée utilisant l'extension MySQLi:

Code PHP :
// mysqli, Requête préparée
$query = $conn->prepare('SELECT * FROM users WHERE username = ?');
$query->bind_param('s', $username); // s = string, i = integer
$query->execute();