Mysql
 sql >> Base de données >  >> RDS >> Mysql

Puis-je remplacer aveuglément toutes les fonctions mysql_ par mysqli_ ?

La réponse courte est non , les fonctions ne sont pas équivalentes.

La bonne nouvelle est qu'il existe un outil de conversion qui vous aidera si vous avez beaucoup d'appels/projets à modifier. Cela permettra à vos scripts de fonctionner immédiatement.

https://github.com/philip/MySQLConverterTool

C'est une version fourchue de la version originale d'Oracle, et c'est casher.

Cela dit, il n'est pas trop difficile de mettre à jour votre code, et vous voudrez peut-être quand même migrer vers une méthodologie orientée objet...

1) La connexion

À toutes fins utiles, vous avez besoin d'une nouvelle fonction de connexion qui enregistre la connexion en tant que variable PHP, par exemple ;

$mysqli = new mysqli($host, $username, $password, $database);

Remarquez que j'ai enregistré la connexion à $mysqli . Vous pouvez enregistrer dans $db ou ce que vous voulez, mais vous devez l'utiliser tout au long de votre code pour référencer la connexion.

N'oubliez pas d'activer le rapport d'erreurs pour mysqli avant d'ouvrir la connexion ;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) La requête

Remarque :vous devez vous protéger contre l'injection SQL avec des instructions préparées, qui sont disponibles dans MySQLi. Jetez un œil à Comment puis-je empêcher l'injection SQL dans PHP ? , mais je vais juste couvrir les bases ici.

Vous devez maintenant inclure la connexion comme argument dans votre requête, et d'autres mysqli_ les fonctions. Dans le code procédural, c'est le premier argument, dans OO vous l'écrivez comme une méthode de classe.

Procédure :

$result = mysqli_query($mysqli, $sql);

OO :

$result = $mysqli->query($sql);

3) Récupérer le résultat

La récupération du résultat est similaire à l'ancien mysql_ fonction dans la procédure ;

while ($row = mysqli_fetch_assoc($result))

mais comme $result est maintenant un objet dans mysqli, vous pouvez utiliser l'appel de fonction d'objet ;

while ($row = $result->fetch_assoc())

4) Fermer la connexion

Donc, comme avant, vous devez inclure la connexion dans la fonction close; comme argument de procédure ;

mysqli_close($mysqli);

et en tant qu'objet sur lequel vous exécutez la fonction dans OO ;

$mysqli->close();

Je serais ici pour toujours si je les parcourais tous, mais vous voyez l'idée. Jetez un oeil à la documentation pour plus d'informations. N'oubliez pas de convertir toutes les fonctions de fermeture de connexion, de publication de résultat ou d'erreur et de comptage de lignes dont vous disposez.

La règle empirique de base est que pour les fonctions qui utilisent la connexion à la base de données, vous devez l'inclure dans la fonction maintenant (soit comme premier argument dans la procédure, soit comme objet que vous utilisez pour appeler la fonction dans OO), ou pour un ensemble de résultats vous pouvez simplement changer la fonction en mysqli_ ou utilisez le jeu de résultats comme objet.