Installation du pilote PDO sur le serveur MySQL Linux

102

Il n'y a pas longtemps, on m'a suggéré de changer mon code pour utiliser PDO afin de paramétrer mes requêtes et d'enregistrer en toute sécurité le HTML dans la base de données.

Eh bien, voici les principaux problèmes:

  1. J'ai regardé http://php.net/manual/en/ref.pdo-mysql.php , et je ne sais pas vraiment où je devrais mettre cette $ ./configure --with-pdo-mysqlchaîne ...

  2. Le site que je construis ne nécessite en fait qu'un PDO pour une page. Bien que je puisse envisager de le réécrire, cela prendrait un certain temps et j'ai besoin que les pages soient bientôt en cours d'exécution, donc je ne peux pas désactiver complètement MySQL. Si j'installe PDO, est-ce que je pourrai toujours utiliser des mysql_*gestionnaires?

Le serveur en question exécute PHP version 5.4.6-1ubuntu1 et Apache / 2.2.22 (Ubuntu). J'exécute également une base de données phpMyAdmin, si cela compte.

Yuri Scarbaci
la source

Réponses:

183

Sur Ubuntu, vous devriez pouvoir installer les parties PDO nécessaires d'apt en utilisant sudo apt-get install php5-mysql

Il n'y a aucune limitation entre l'utilisation simultanée de PDO et de mysql_. Vous devrez cependant créer deux connexions à votre base de données, une avec mysql_ et une avec PDO.

Jani Hartikainen
la source
1
ok, j'ai regardé dans mon fichier php.ini et il semble que pdo est activé par défaut, j'ai toujours besoin de savoir si je peux utiliser à la fois les gestionnaires pdo et mysql_ * ...
Yuri Scarbaci
1
@ YuriCollector'sEditionRossi a mis à jour la réponse pour cela.
Jani Hartikainen
1
Il convient de mentionner que vous devez redémarrer apache par la suite pour que les modifications s'appliquent.
Adam F
1
@jonaspas si vous êtes sur ubuntu, essayez de mettre à jour avec sudo apt-get updatepuis exécutez l'installation d'origine à partir de la réponse.
ryAn_Hdot
14
Merci ryAn_Hdot! Mais cela n'a pas non plus fonctionné pour moi. Ma solution maintenant: j'utilisais php7 et je devais le fairesudo apt-get install php-mysql
johnnydoe82
25

C'est une bonne question, mais je pense que vous comprenez mal ce que vous lisez.

Installer PDO

C'est ./config --with-pdo-mysqlquelque chose que vous ne devez mettre en place que si vous compilez votre propre code PHP. Si vous l'installez avec des gestionnaires de paquets, il vous suffit d'utiliser la ligne de commande donnée par Jany Hartikainen: sudo apt-get install php5-mysqlet aussisudo apt-get install pdo-mysql

Compatibilité avec mysql_

Mis à part le fait que mysql_ est vraiment déconseillé, ils sont tous les deux indépendants. Si vous utilisez PDO, mysql_ n'est pas impliqué, et si vous utilisez mysql_ PDO n'est pas requis.

Si vous désactivez PDO sans modifier aucune ligne de votre code, vous n'aurez aucun problème. Mais depuis que vous avez commencé à vous connecter et à écrire des requêtes avec PDO, vous devez le garder et abandonner mysql_.

Il y a plusieurs années, l'équipe MySQL a publié un script pour migrer vers MySQLi . Je ne sais pas si cela peut être personnalisé, mais c'est officiel.

artragis
la source
donc si je veux utiliser les deux en même temps, je devrai utiliser les deux méthodes de connexion? ce que je veux dire, c'est: j'ai déjà 50 pages en cours d'exécution, avec beaucoup de code, cela a pris comme un an de développement et je ne peux pas revenir en arrière juste pour 1 page, pas maintenant de toute façon ... ce que je dois faire c'est faire tourner ces 50 pages telles qu'elles sont, et cette page que j'écris maintenant en utilisant pdo, est-ce même possible? merci pour votre temps ^^
Yuri Scarbaci
le refactoring peut être utile si vous devez changer beaucoup de code. Mais oui, si vous voulez utiliser les deux, vous devez établir deux connexions.
artragis
y a-t-il un simple pourquoi refactorer mon code? je travaille actuellement sur un travail que je n'ai pas commencé moi-même, il a été fait par un autre programmeur qui l'a laissé de côté, et maintenant je dois m'adapter à son code ... c'est un peu dur puisque chacun a son propre style, donc je préfère le laisser tel quel pour l'instant, puisque ce logiciel a été utilisé jusqu'à présent sans aucun problème ... thx btw ^^ dois-je fermer la connexion mysql avant d'ouvrir le pdo, ou je peux avoir les deux ouverts à le même temps? ^^
Yuri Scarbaci
1
peut-être que vous pouvez utiliser un IDE comme netbeans ou eclipse
artragis
1
J'ai trouvé un script qui vous permet de migrer vers mysqli, et peut-être vers PDO
artragis
17

En gros, la réponse de Jani Hartikainen est juste! J'ai voté pour sa réponse. Ce qui manquait sur mon système (basé sur Ubuntu 15.04) était d'activer l'extension PDO dans mon php.ini

extension=pdo.so
extension=pdo_mysql.so

redémarrer le serveur web (par exemple avec "sudo service apache2 restart") -> chaque amende :-)

Pour trouver où se trouve votre fichier php.ini actif actuel, vous pouvez utiliser phpinfo () ou d'autres astuces à partir d'ici: https://www.ostraining.com/blog/coding/phpini-file/

Tobias Gaertner
la source
A travaillé pour moi. Merci. +1
Marcel
1
Je n'avais pas ces lignes dans mon fichier php.ini. Je l'ai seulement fait extension=pdo_mysql.dll, j'ai donc décommenté cela et redémarré Apache et cela a fonctionné.
user3494047
@ user3494047 Je suppose que vous êtes sur un système Windows. J'ai pris l'exemple de configuration d'un système Linux. Mais super que vous ayez partagé votre expérience!
Tobias Gaertner
En fait, c'est un ubuntu 14.04
user3494047
Merci! J'ai dû exécuter une douzaine de sudo apt-get install...commandes et rien n'a fonctionné, finalement l'ajout de ces deux lignes au php.ini l'a fait. Il suffit de mentionner la commande de redémarrage du serveur apache que vous exécutez après l' enregistrement: sudo service apache2 restart. Et mon chemin de fichier php.ini était /etc/php/7.0/apache2/php.ini(OS: Lubuntu 16.04, analogue à Ubuntu à ces fins). Exécutez sudo gedit <fullpath>pour le modifier. (gedit ou geany ou n'importe quel éditeur de texte sur votre système)
Nikhil VJ
10

Au début, installez les parties PDO nécessaires en exécutant la commande sudo apt-get install php*-mysqloù * est un nom de version de php comme 5.6, 7.0, 7.1, 7.2 Après l'installation, vous devez mentionner (décommenter si est déjà là) ces deux déclarations

extension=pdo.so
extension=pdo_mysql.so

dans votre fichier .ini et redémarrez votre serveur par commande

sudo service apache2 restart
Avnish alok
la source
Cette réponse n'ajoute aucune nouvelle information - donc son imo n'est pas utile.
Tobias Gaertner
1
Cette réponse a été extrêmement utile car elle a souligné que vous avez besoin du numéro de version PHP dans php*-mysql. J'essayais php-mysqlet php7-mysqlen vain et cette réponse a scellé l'affaire! Merci!
jedmao
A travaillé pour moi. Merci.
Mahir Altınkaya
@ MahirAltınkaya Gald, cela a aidé.
Avnish alok
8
  1. PDO signifie PHP Data Object.
  2. PDO_MYSQL est le pilote qui implémentera l'interface entre l'objet de données (base de données) et l'entrée utilisateur (une couche sous l'interface utilisateur appelée "code behind") accédant à votre objet de données, la base de données MySQL.

Le but de son utilisation est d'implémenter une couche de sécurité supplémentaire entre l'interface utilisateur et la base de données. En utilisant cette couche, les données peuvent être normalisées avant d'être insérées dans votre structure de données. (Les majuscules sont des majuscules, pas d'espaces de début ou de fin, toutes les dates sont correctement formées.)

Mais il y a quelques nuances à cela dont vous n'êtes peut-être pas au courant.

Tout d'abord, jusqu'à présent, vous avez probablement écrit toutes vos requêtes dans quelque chose de similaire à l'URL, et vous passez les paramètres en utilisant l'URL elle-même. En utilisant le PDO, tout cela se fait sous le niveau de l'interface utilisateur. L'interface utilisateur transmet la balle au PDO qui la transporte dans le champ et la plante dans la base de données pour un TOUCHDOWN en 7 points .. il obtient sept points, car il l'a obtenu là-bas et a fait beaucoup plus en toute sécurité que de transmettre des informations via l'URL .

Vous pouvez également renforcer votre site à l' injection SQL en utilisant une couche de données. En utilisant cette couche intermédiaire qui est le SEUL «joueur» qui parle à la base de données elle-même, je suis sûr que vous pouvez voir comment cela pourrait être beaucoup plus sécurisé. Interface vers datalayer vers base de données, datalayer vers base de données vers datalayer vers interface.

Et:

En mettant en œuvre les meilleures pratiques lors de l'écriture de votre code, vous serez beaucoup plus satisfait du résultat.

Sources supplémentaires:

Re: Fonctions MySQL dans l'url php dot net / manual / en / ref dot pdo-mysql dot php

Re: architecture à trois niveaux - ajouter de la sécurité à vos applications https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re: Object Oriented Design using UML Si vous voulez vraiment en savoir plus à ce sujet, c'est le meilleur livre du marché, Grady Booch est le père de UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 et CFTOKEN = 82813028

Ou vérifiez avec bitmonkey. Il y a un groupe avec lequel je suis sûr que vous pourriez apprendre beaucoup de choses.

>

Si nous savions ce que signifiait vraiment la terminologie, nous n'aurions rien besoin d'apprendre.

>

Elaine Ossipov
la source
0

Si vous avez besoin d'un conteneur Docker CakePHP avec MySQL, j'ai créé une image Docker à cet effet! Pas besoin de s'inquiéter de sa configuration. Cela fonctionne juste!

Voici comment j'ai installé dans une image basée sur Ubuntu:

https://github.com/marcellodesales/php-apache-mysql-4-cakephp-docker/blob/master/Dockerfile#L8

RUN docker-php-ext-install mysql mysqli pdo pdo_mysql

La création et l'exécution de votre application ne sont qu'un processus en 2 étapes (étant donné que vous êtes dans le répertoire actuel de l'application):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp
Marcello de Sales
la source
Au cas où quelqu'un essaie de le faire avec un conteneur docker déjà en cours d'exécution: sudo /etc/init.d/apache2 restartest nécessaire pour redémarrer le serveur Apache
MajorBreakfast