Comme vous le savez si vous suivez un peu le flux internals@php, la RC2 de PHP 5.5 vient de sortir ce 23 mai 2013.
La dernière ligne droite vers PHP 5.5.0 est devant vous. J’ai écrit un article sur les nouveautés qui devraient être présentées lors de la sortie de PHP 5.5.0 dans le « Magazine Inside Linux Hors Série N°5 » (page 18) et j’y précisais que l’extension ext/mysql devenait obsolète.
Cet article revient sur cette information et sur les nouvelles bonnes habitudes à prendre.
Tout d’abord, démarrez vos nouveaux projets, ceux qui vont naitre en juin-juillet 2013 directement en PHP 5.5.0 si la release est disponible à ce moment et que votre hébergement est prêt. De manière générale votre ancien code fonctionnera avec cette nouvelle version mais soyez quand même prudent.
Officiellement donc, l’extension PHP ext/mysql devient obsolète, ce qui signifie qu’elle génèrera dorénavant des alertes de niveau E_DEPRECATED. La documentation du site officiel php.net est déjà à jour à ce sujet. Notez que cette extension risque aussi de disparaitre.
Adoptez directement les bons réflexes, passez à l’extension ext/mysqli ou ext/pdo_mysql.
Il existe 3 API PHP pour Mysql : MySQL, MySQLi, et PDO.
Mysqli (le i signifant improved) a été développée pour répondre aux nouvelles fonctionnalités des bases de données MySQL de version supérieures à 4.1 (actuellement, nous sommes à la 5.5). Voici en quelques points les avantages de cette extension :
Si vous développez essentiellement vos projets en PHP – MySQL, utilisez l’extension Mysqli sinon tournez vous vers PDO.
Pour rappel, l’extension PDO permet en outre d’interroger différent moteur de base de données (autres que MySQL) sans devoir modifier votre code PHP à condition que les requêtes soit en SQL standard. Donc vous pouvez utiliser deux bases de données différentes, par exemple MySQL et PostgreSQL au sein d’un même projet assez simplement.
Je ne vais pas écrire un cours sur MySQLi ici, ce n’est pas le but mais voici simplement le code de base pour débuter avec cette extension dans un style procédural :
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Vérification de la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
/* Requête "Select" retourne un jeu de résultats */
if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {
printf("Select a retourné %d lignes.\n", mysqli_num_rows($result));
/* Libération du jeu de résultats */
mysqli_free_result($result);
}
/* Si nous avons à récupérer beaucoup de données, nous utilisons MYSQLI_USE_RESULT */
if ($result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT)) {
mysqli_free_result($result);
}
mysqli_close($link);
?>
En en version POO :
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Vérification de la connexion */
if ($mysqli->connect_errno) {
printf("Échec de la connexion : %s\n", $mysqli->connect_error);
exit();
}
/* Requête "Select" retourne un jeu de résultats */
if ($result = $mysqli->query("SELECT Name FROM City LIMIT 10")) {
printf("Select a retourné %d lignes.\n", $result->num_rows);
/* Libération du jeu de résultats */
$result->close();
}
/* Si nous avons à récupérer beaucoup de données, nous utilisons MYSQLI_USE_RESULT */
if ($result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT)) {
$result->close();
}
$mysqli->close();
?>
Comme vous pouvez le voir c’est relativement simple à utiliser. Consultez le manuel PHP pour l’ensemble des fonctionnalités.
La requête asynchrone consiste à lancer une requête longue (via php), pendant que cette requête est traitée, le code PHP continue de s’exécuter, vous pouvez utiliser le résultat de votre requête plus tard.