Puis-je aveuglément remplacer toutes les fonctions mysql_ avec mysqli_?
J'ai utilisé mysql_query()
tout au long de mon projet; mais je viens d'apprendre que mysql_
était obsolète depuis PHP 5.5, a été supprimé en PHP 7.
Donc, je voudrais savoir si je peux remplacer tous les mysql_
fonctions avec mysqli_
dans mon projet à l'aveuglette? Par exemple, il suffit de remplacer mysql_query()
avec mysqli_query()
. Est-il un effet?
Vous devez vous connecter pour publier un commentaire.
La réponse courte est pas, les fonctions ne sont pas équivalentes.
Les bonnes nouvelles est, il est un outil de convertisseur qui vous aidera si vous avez beaucoup d'appels/projets de changement. Cela permettra à vos scripts à travailler tout de suite.
https://github.com/philip/MySQLConverterTool
C'est un fork de la version de l'Oracle version originale, et c'est casher.
Cela dit, il n'est pas trop difficile de mettre à jour votre code, et vous pouvez migrer vers un objet orienté méthodologie de toute façon ...
1) La Connexion
Pour toutes fins utiles, vous avez besoin d'une nouvelle fonction de connexion qui permet d'économiser la connexion comme une variable PHP, par exemple;
Remarquer que je l'ai sauvé la connexion à
$mysqli
. Vous pouvez enregistrer à$db
ou ce que vous voulez, mais vous devez utiliser ce tout au long de votre code de référence de la connexion.N'oubliez pas de vérifier une erreur de connexion si;
2) La Requête
Remarque: Vous devez les protéger contre les injections SQL avec des requêtes préparées, qui sont disponibles dans MySQLi. Jetez un oeil à Comment puis-je prévenir l'injection SQL en PHP?, mais je vais juste à couvrir les bases ici.
Vous disposez maintenant d'inclure la connexion en tant qu'argument dans votre requête, et d'autres
mysqli_
fonctions. Dans le code de procédure c'est le premier argument, dans OO vous écrire ça comme une méthode de classe;De procédure:
OO:
3) Extraire Les Résultats
Le chargement, le résultat est similaire à l'ancien
mysql_
fonction dans le cadre de procédures;mais comme
$result
est maintenant un objet mysqli, vous pouvez utiliser la fonction de l'objet de l'appel;4) Fermeture De La Connexion
Alors comme avant, vous devez inclure le lien dans la fonction close; comme un argument de procédure;
et que l'objet que l'exécution de la fonction dans OO;
Je serais là pour toujours, si je suis allé à travers eux tous, mais vous obtenez l'idée. Jetez un oeil à la documentation pour plus d'informations. N'oubliez pas de convertir n'importe quelle connexion fermer, résultat de la libération ou de l'erreur et de la ligne de comptage des fonctions que vous avez.
La règle de base est que pour les fonctions qui utilisent la connexion de base de données, vous devez l'inclure dans la fonction maintenant (comme le premier argument de procédure, ou de l'objet que vous utilisez pour appeler la fonction dans OO), ou pour l'ensemble des résultats, il vous suffit de modifier la fonction de
mysqli_
ou utiliser le résultat comme l'objet.ext:mysql
àext:mysqli
, qui est ce que cette question se pose au sujet de.Si vous ne pouvez pas convertir tous les appels aux fonctions mysqli sur un vieux projet, vous pouvez installer et inclure la bibliothèque php7-mysql-shim.
Il va essayer de créer un transparent de remplacement pour PHP mysql sur 7 à l'aide de mysqli.
Évidemment, la performance est plus lente, mais c'est une solution pour contourner le problème dans un couple de minutes.
Vous pouvez en toute sécurité inclure la librairie dans les projets de travail avec PHP 5.6 (il sera ignoré).
Vous ne pouvez pas. certaines des fonctions de mysql et mysqli besoin de différents paramètres. Ce que vous devez savoir qui va utiliser les mêmes paramètres.