PHP - Passer de mysql à mysqli, requêtes de base
Table des matières
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).
Auparavant, avec MySQL, se connecter à la base de données se faisait ainsi :
Maintenant, avec MySQLi, on utilise :
Exemple de requête SELECT et affichage des résultats dans un tableau :
Maintenant, avec MySQLi, cela donne :
Avec MySQL, on utilisait :
Avec MySQLI, cet exemple devient :
De la même façon que le insert, le DELETE avec MySQL :
Qui devient avec MySQLi :
A venir
Avec MySQL, clore la connexion à la base :
Et bien, avec MySQLi, cela devient :
Toute requête qui fait intervenir des variables est à protéger d'éventuelles injections SQL.
Voici comment s'en prémunir avec MySQLi :
Voici un exemple de requête à trous, préparée utilisant l'extension MySQLi:
Pour vérifier si une requête renvoie des lignes ou non :
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 = $conn->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();
Tester le nombre de lignes
Pour vérifier si une requête renvoie des lignes ou non :
Code PHP :
// on crée la requête SQL $req = "SELECT * FROM table1 WHERE chk_actif=1;"; // on envoie la requête $res = $conn->query($req) or die(); // Si on a des lignes... if ( $res->num_rows > 0 ) { echo "On a des résultats"; } else { echo "On n'a aucun résultat"; }