Installieren des PDO-Treibers auf dem MySQL Linux-Server

102

Vor kurzem wurde mir vorgeschlagen, meinen Code so zu ändern, dass PDO verwendet wird, um meine Abfragen zu parametrisieren und HTML sicher in der Datenbank zu speichern.

Nun, hier sind die Hauptprobleme:

  1. Ich habe mir http://php.net/manual/en/ref.pdo-mysql.php angesehen und verstehe nicht wirklich, wo ich diesen $ ./configure --with-pdo-mysqlString platzieren soll ...

  2. Die Site, die ich erstelle, erfordert nur PDO für eine Seite. Obwohl ich vielleicht überlege, es neu zu schreiben, würde es eine Weile dauern und ich brauche die Seiten, um bald ausgeführt zu werden, damit ich MySQL nicht vollständig ausschalten kann. Kann ich nach der Installation von PDO weiterhin mysql_*Handler verwenden?

Auf dem betreffenden Server werden PHP Version 5.4.6-1ubuntu1 und Apache / 2.2.22 (Ubuntu) ausgeführt. Ich führe auch eine phpMyAdmin-Datenbank aus, wenn es darauf ankommt.

Yuri Scarbaci
quelle

Antworten:

182

Unter Ubuntu sollten Sie in der Lage sein, die erforderlichen PDO-Teile von apt using zu installieren sudo apt-get install php5-mysql

Es gibt keine Einschränkung zwischen der gleichzeitigen Verwendung von PDO und mysql_. Sie müssen jedoch zwei Verbindungen zu Ihrer Datenbank herstellen, eine mit mysql_ und eine mit PDO.

Jani Hartikainen
quelle
1
Okay, ich habe in meiner php.ini-Datei nachgeschlagen und es sieht so aus, als ob pdo standardmäßig aktiviert ist. Ich muss immer noch wissen, ob ich sowohl pdo- als auch mysql_ * -Handler verwenden kann ...
Yuri Scarbaci
1
@ YuriCollector'sEditionRossi Die Antwort darauf wurde aktualisiert.
Jani Hartikainen
1
Es ist erwähnenswert, dass Sie Apache anschließend neu starten müssen, damit die Änderungen übernommen werden.
Adam F
1
@jonaspas Wenn Sie auf Ubuntu sind, versuchen Sie, mit zu aktualisieren, und führen Sie sudo apt-get updatedann die ursprüngliche Installation aus der Antwort aus.
RyAn_Hdot
14
Danke ryAn_Hdot! Aber das hat auch bei mir nicht funktioniert. Meine Lösung jetzt: Ich lief PHP7 und ich musste tunsudo apt-get install php-mysql
Johnnydoe82
25

Das ist eine gute Frage, aber ich denke, Sie verstehen einfach falsch, was Sie lesen.

Installieren Sie PDO

Das ./config --with-pdo-mysqlmüssen Sie nur anziehen, wenn Sie Ihren eigenen PHP-Code kompilieren. Wenn Sie es mit Paketmanagern installieren, müssen Sie nur die von Jany Hartikainen angegebene Befehlszeile verwenden: sudo apt-get install php5-mysqlund auchsudo apt-get install pdo-mysql

Kompatibilität mit mysql_

Abgesehen von der Tatsache, dass mysql_ wirklich entmutigt ist, sind beide unabhängig. Wenn Sie PDO verwenden, ist mysql_ nicht betroffen, und wenn Sie mysql_ verwenden, ist PDO nicht erforderlich.

Wenn Sie PDO deaktivieren, ohne eine Zeile in Ihrem Code zu ändern, haben Sie kein Problem. Aber seit Sie angefangen haben, eine Verbindung mit PDO herzustellen und Abfragen zu schreiben, müssen Sie diese behalten und mysql_ aufgeben.

Vor einigen Jahren veröffentlichte das MySQL-Team ein Skript zur Migration auf MySQLi . Ich weiß nicht, ob es angepasst werden kann, aber es ist offiziell.

Artragis
quelle
Wenn ich also beide gleichzeitig verwenden möchte, muss ich beide Verbindungsmethoden verwenden? Was ich meine ist: Ich habe ungefähr 50 Seiten, die bereits laufen, mit viel Code, es hat ungefähr ein Jahr gedauert, bis ich sie entwickelt habe, und ich kann nicht nur für eine Seite zurückkehren, jetzt sowieso nicht ... was ich tun muss, ist Lassen Sie diese 50 Seiten so laufen, wie sie sind, und diese eine Seite, die ich gerade mit pdo schreibe, ist das überhaupt möglich? danke für deine Zeit ^^
Yuri Scarbaci
Refactoring kann nützlich sein, wenn Sie viel Code ändern müssen. Aber ja, wenn Sie beide verwenden möchten, müssen Sie zwei Verbindungen herstellen.
Artragis
Gibt es einen einfachen Grund, meinen Code umzugestalten? Ich arbeite gerade an einer Arbeit, die ich nicht selbst angefangen habe. Sie wurde von einem anderen Programmierer gemacht, der sie weggelassen hat. Jetzt muss ich mich an seinen Code anpassen. Es ist ein bisschen hart, da jeder seinen eigenen Stil hat. Also würde ich es lieber so lassen, wie es jetzt ist, da diese Software bis jetzt ohne Probleme verwendet wurde ... Übrigens, muss ich die MySQL-Verbindung schließen, bevor ich die PDO-Verbindung öffne, oder ich kann beide offen haben die selbe Zeit? ^^
Yuri Scarbaci
1
Vielleicht können Sie eine IDE wie Netbeans oder Eclipse
Artragis
1
Ich habe ein Skript gefunden, mit dem Sie zu mysqli und möglicherweise zu PDO
migrieren können
17

Grundsätzlich ist die Antwort von Jani Hartikainen richtig! Ich habe seine Antwort positiv bewertet. Was auf meinem System (basierend auf Ubuntu 15.04) fehlte, war die Aktivierung der PDO-Erweiterung in meiner php.ini

extension=pdo.so
extension=pdo_mysql.so

Starten Sie den Webserver neu (zB mit "sudo service apache2 restart") -> jede Geldstrafe :-)

Um herauszufinden, wo sich Ihre aktuell aktive php.ini-Datei befindet, können Sie phpinfo () oder andere Hinweise von hier verwenden: https://www.ostraining.com/blog/coding/phpini-file/

Tobias Gaertner
quelle
Hat für mich gearbeitet. Vielen Dank. +1
Marcel
1
Ich hatte diese Zeilen nicht in meiner php.ini-Datei. Ich habe nur extension=pdo_mysql.dll, also habe ich das auskommentiert und Apache neu gestartet und es hat funktioniert.
user3494047
@ user3494047 Ich denke du bist auf einem Windows System. Ich habe das Konfigurationsbeispiel von einem Linux-System genommen. Aber toll, dass du deine Erfahrungen geteilt hast!
Tobias Gaertner
Eigentlich ist es ein Ubuntu 14.04
user3494047
Vielen Dank! Ich muss ein Dutzend sudo apt-get install...Befehle ausgeführt haben und nichts hat funktioniert. Schließlich habe ich diese beiden Zeilen zur php.ini hinzugefügt. Erwähnen Sie nur den Befehl zum Neustart des Apache-Servers, den Sie nach dem Speichern ausführen : sudo service apache2 restart. Und mein php.ini-Dateipfad war /etc/php/7.0/apache2/php.ini(Betriebssystem: Lubuntu 16.04, analog zu Ubuntu für diese Zwecke). Führen Sie es aus sudo gedit <fullpath>, um es zu bearbeiten. (gedit oder geany oder irgendein Texteditor auf Ihrem System)
Nikhil VJ
10

Installieren Sie zuerst die erforderlichen PDO-Teile, indem Sie den Befehl sudo apt-get install php*-mysqlausführen, wobei * ein Versionsname von PHP wie 5.6, 7.0, 7.1, 7.2 ist. Nach der Installation müssen Sie diese beiden Anweisungen erwähnen (auskommentieren, wenn sie bereits vorhanden sind)

extension=pdo.so
extension=pdo_mysql.so

in Ihrer INI-Datei und starten Sie Ihren Server per Befehl neu

sudo service apache2 restart
Avnish alok
quelle
Diese Antwort fügt keine neuen Informationen hinzu - daher ist es nicht hilfreich.
Tobias Gaertner
1
Diese Antwort war äußerst hilfreich, da darauf hingewiesen wurde, dass Sie die PHP-Versionsnummer benötigen php*-mysql. Ich habe es versucht php-mysqlund php7-mysqlohne Erfolg und dann hat diese Antwort den Deal besiegelt! Vielen Dank!
jedmao
Hat für mich gearbeitet. Vielen Dank.
Mahir Altınkaya
@ MahirAltınkaya Gald, es hat geholfen.
Avnish alok
8
  1. PDO steht für PHP Data Object.
  2. PDO_MYSQL ist der Treiber, der die Schnittstelle zwischen dem Datenobjekt (Datenbank) und der Benutzereingabe (eine Schicht unter der Benutzeroberfläche namens "Code Behind") implementiert, die auf Ihr Datenobjekt, die MySQL-Datenbank, zugreift.

Der Zweck dieser Verwendung besteht darin, eine zusätzliche Sicherheitsebene zwischen der Benutzeroberfläche und der Datenbank zu implementieren. Mithilfe dieser Ebene können Daten normalisiert werden, bevor sie in Ihre Datenstruktur eingefügt werden. (Hauptstädte sind Hauptstädte, keine führenden oder nachfolgenden Leerzeichen, alle Daten sind ordnungsgemäß gebildet.)

Aber es gibt ein paar Nuancen, die Sie vielleicht nicht kennen.

Zunächst haben Sie bis jetzt wahrscheinlich alle Ihre Abfragen in einer ähnlichen Form wie die URL geschrieben und die Parameter über die URL selbst übergeben. Bei Verwendung des PDO erfolgt dies alles auf der Ebene der Benutzeroberfläche. Die Benutzeroberfläche übergibt den Ball an das PDO, das ihn nach unten trägt und für einen 7-Punkte-TOUCHDOWN in die Datenbank einfügt. Er erhält sieben Punkte, weil er ihn dort erhalten hat und dies viel sicherer getan hat, als Informationen über die URL weiterzuleiten .

Sie können Ihre Site auch mithilfe einer Datenschicht auf SQL-Injection härten . Wenn Sie diese Zwischenschicht verwenden, die der EINZIGE "Spieler" ist, der mit der Datenbank selbst kommuniziert, können Sie sicher sehen, wie dies viel sicherer sein könnte. Schnittstelle zu Datenschicht zu Datenbank, Datenschicht zu Datenbank zu Datenschicht zu Schnittstelle.

Und:

Wenn Sie beim Schreiben Ihres Codes Best Practices implementieren, sind Sie mit dem Ergebnis viel zufriedener.

Zusätzliche Quellen:

Betreff: MySQL-Funktionen in der URL php dot net / manual / de / ref dot pdo-mysql dot php

Betreff: dreistufige Architektur - Hinzufügen von Sicherheit zu Ihren Anwendungen https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Betreff: Objektorientiertes Design mit UML Wenn Sie wirklich mehr darüber erfahren möchten, ist dies das beste Buch auf dem Markt. Grady Booch war der Vater von UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 & CFTOKEN = 82813028

Oder erkundigen Sie sich bei Bitmonkey. Es gibt dort eine Gruppe, mit der man sicher viel lernen kann.

>

Wenn wir wüssten, was die Terminologie wirklich bedeutet, müssten wir nichts lernen.

>

Elaine Ossipov
quelle
0

Wenn Sie einen CakePHP-Docker-Container mit MySQL benötigen, habe ich zu diesem Zweck ein Docker-Image erstellt! Sie müssen sich keine Gedanken über die Einrichtung machen. Es funktioniert einfach!

So habe ich ein Ubuntu-basiertes Image installiert:

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

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

Das Erstellen und Ausführen Ihrer Anwendung erfolgt in nur zwei Schritten (vorausgesetzt, Sie befinden sich im aktuellen Verzeichnis der App):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp
Marcello de Sales
quelle
Falls jemand versucht, dies mit einem bereits laufenden Docker-Container zu tun: sudo /etc/init.d/apache2 restartwird benötigt, um den Apache-Server neu zu starten
MajorBreakfast