Installazione del driver PDO su server MySQL Linux


102

Mi è stato suggerito, non molto tempo fa, di modificare il mio codice per utilizzare PDO al fine di parametrizzare le mie query e salvare in modo sicuro l'HTML nel database.

Bene, ecco i problemi principali:

  1. Ho guardato http://php.net/manual/en/ref.pdo-mysql.php e non capisco dove dovrei mettere quella $ ./configure --with-pdo-mysqlstringa ...

  2. Il sito che sto costruendo in realtà richiede solo PDO per una pagina. Sebbene possa prendere in considerazione la possibilità di riscriverlo, ci vorrebbe un po 'di tempo e ho bisogno che le pagine vengano eseguite presto, quindi non posso disattivare completamente MySQL. Se installo PDO, potrò ancora utilizzare i mysql_*gestori?

Il server in questione esegue la versione PHP 5.4.6-1ubuntu1 e Apache / 2.2.22 (Ubuntu). Sto anche eseguendo un database phpMyAdmin, se è importante.

Risposte:


183

Su Ubuntu dovresti essere in grado di installare le parti PDO necessarie da apt utilizzando sudo apt-get install php5-mysql

Non ci sono limitazioni tra l'utilizzo simultaneo di PDO e mysql_. Tuttavia, dovrai creare due connessioni al tuo DB, una con mysql_ e l'altra utilizzando PDO.


1
ok, ho cercato nel mio file php.ini e sembra che pdo sia abilitato per impostazione predefinita, ho ancora bisogno di sapere se posso usare entrambi i gestori pdo e mysql_ * ...
Yuri Scarbaci

1
@ YuriCollector'sEditionRossi Ha aggiornato la risposta per questo.
Jani Hartikainen

1
Vale la pena ricordare che è necessario riavviare apache in seguito affinché le modifiche vengano applicate.
Adam F

1
@jonaspas se sei su Ubuntu, prova ad aggiornare con sudo apt-get updatequindi esegui l'installazione originale dalla risposta.
ryAn_Hdot

14
Grazie ryAn_Hdot! Ma anche questo non ha funzionato per me. La mia soluzione ora: stavo eseguendo php7 e dovevo farlosudo apt-get install php-mysql
johnnydoe82

25

Questa è una buona domanda, ma penso che tu abbia frainteso ciò che leggi.

Installa PDO

Il ./config --with-pdo-mysqlè qualcosa che si deve mettere in solo se si compila il proprio codice PHP. Se lo installi con i gestori di pacchetti, devi solo usare la riga di comando data da Jany Hartikainen: sudo apt-get install php5-mysqle anchesudo apt-get install pdo-mysql

Compatibilità con mysql_

A parte il fatto che mysql_ è davvero scoraggiato, sono entrambi indipendenti. Se usi PDO mysql_ non è implicato e se usi mysql_ PDO non è richiesto.

Se disattivi PDO senza modificare alcuna riga nel codice, non avrai problemi. Ma da quando hai iniziato a connetterti e scrivere query con PDO, devi mantenerlo e rinunciare a mysql_.

Diversi anni fa il team di MySQL ha pubblicato uno script per migrare a MySQLi . Non so se può essere personalizzato, ma è ufficiale.


quindi se voglio utilizzarli entrambi contemporaneamente dovrò utilizzare entrambi i metodi di connessione? quello che voglio dire è: ho circa 50 pagine già in esecuzione, con molto codice, ci è voluto un anno di sviluppo e non posso tornare indietro solo per 1 pagina, non ora comunque ... quello che devo fare è quelle 50 pagine vengono eseguite come sono, e questa pagina che sto scrivendo ora usando PDO, è anche possibile? grazie per il tuo tempo ^^
Yuri Scarbaci

il refactoring può essere utile se devi cambiare molto codice. Ma sì, se vuoi usarli entrambi, devi stabilire due connessioni.
artragis

c'è un motivo semplice per rifattorizzare il mio codice? Attualmente sto lavorando a un lavoro che non ho iniziato da solo, è stato fatto da un altro programmatore che l'ha interrotto, e ora devo adattarmi al suo codice ... è un po 'duro dato che ognuno ha il proprio stile, quindi preferirei lasciarlo così com'è per ora, dal momento che questo software è stato utilizzato fino ad ora senza alcun problema ... grazie a proposito ^^ devo chiudere la connessione mysql prima di aprire quella pdo, o posso avere entrambi aperti su lo stesso tempo? ^^
Yuri Scarbaci

1
forse puoi usare un IDE come netbeans o eclipse
artragis

1
Ho trovato uno script che ti permette di migrare a mysqli, e forse a PDO
artragis

17

Fondamentalmente la risposta di Jani Hartikainen è giusta! Ho votato positivamente la sua risposta. Quello che mancava nel mio sistema (basato su Ubuntu 15.04) era abilitare l'estensione PDO nel mio php.ini

extension=pdo.so
extension=pdo_mysql.so

riavviare il server web (ad es. con "sudo service apache2 restart") -> ogni bene :-)

Per trovare dove si trova il tuo attuale file php.ini attivo puoi usare phpinfo () o altri suggerimenti da qui: https://www.ostraining.com/blog/coding/phpini-file/


Ha funzionato per me. Grazie. +1
Marcel

1
Non avevo queste righe nel mio file php.ini. Ho solo extension=pdo_mysql.dll, quindi l'ho decommentato e riavviato apache e ha funzionato.
user3494047

@ user3494047 Immagino che tu sia su un sistema Windows. Ho preso l'esempio di configurazione da un sistema Linux. Ma è fantastico che tu abbia condiviso la tua esperienza!
Tobias Gaertner

In realtà è un ubuntu 14.04
user3494047

Grazie! Devo aver eseguito una dozzina di sudo apt-get install...comandi e niente ha funzionato, alla fine l'aggiunta di queste due righe al php.ini ha funzionato. Basta menzionare il comando restart server Apache che si esegue dopo il salvataggio: sudo service apache2 restart. E il percorso del mio file php.ini era /etc/php/7.0/apache2/php.ini(OS: Lubuntu 16.04, analogo a Ubuntu per questi scopi). Corri sudo gedit <fullpath>a modificarlo. (gedit o geany o qualsiasi editor di testo sul tuo sistema)
Nikhil VJ

10

All'inizio installa le parti PDO necessarie eseguendo il comando sudo apt-get install php*-mysqldove * è il nome di una versione di php come 5.6, 7.0, 7.1, 7.2 Dopo l'installazione devi menzionare (rimuovere il commento se è già presente) queste due istruzioni

extension=pdo.so
extension=pdo_mysql.so

nel file .ini e riavvia il server tramite comando

sudo service apache2 restart

Questa risposta non aggiunge nuove informazioni, quindi non è utile.
Tobias Gaertner

1
Questa risposta è stata estremamente utile perché ha sottolineato che è necessario il numero di versione PHP in php*-mysql. Stavo provando php-mysqle php7-mysqlsenza alcun risultato e poi questa risposta ha sigillato l'affare! Grazie!
jedmao

Ha funzionato per me. Grazie.
Mahir Altınkaya

@ MahirAltınkaya Gald, ha aiutato.
Avnish alok

8
  1. PDO sta per PHP Data Object.
  2. PDO_MYSQL è il driver che implementerà l'interfaccia tra il dataobject (database) e l'input dell'utente (un livello sotto l'interfaccia utente chiamato "code behind") accedendo al tuo oggetto dati, il database MySQL.

Lo scopo di utilizzarlo è implementare un ulteriore livello di sicurezza tra l'interfaccia utente e il database. Utilizzando questo livello, i dati possono essere normalizzati prima di essere inseriti nella struttura dei dati. (Le maiuscole sono maiuscole, nessuno spazio iniziale o finale, tutte le date sono formate correttamente.)

Ma ci sono alcune sfumature di cui potresti non essere a conoscenza.

Prima di tutto, fino ad ora, probabilmente hai scritto tutte le tue query in qualcosa di simile all'URL e passi i parametri usando l'URL stesso. Utilizzando il PDO, tutto ciò viene eseguito a livello di interfaccia utente. L'interfaccia utente passa la palla al PDO che la trasporta sul campo e la inserisce nel database per un TOUCHDOWN a 7 punti .. ottiene sette punti, perché lo ha ottenuto e ha fatto molto più sicuro che passare le informazioni attraverso l'URL .

Puoi anche rafforzare il tuo sito con SQL injection utilizzando un livello dati. Utilizzando questo livello intermedio che è l'UNICO "giocatore" che parla al database stesso, sono sicuro che puoi vedere come questo potrebbe essere molto più sicuro. Dall'interfaccia al datalayer al database, dal datalayer al database al datalayer all'interfaccia.

E:

Implementando le migliori pratiche durante la scrittura del codice sarai molto più soddisfatto del risultato.

Fonti aggiuntive:

Re: Funzioni MySQL nell'URL php dot net / manual / en / ref dot pdo-mysql dot php

Oggetto: architettura a tre livelli: aggiungere sicurezza alle tue applicazioni https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re: Object Oriented Design using UML Se vuoi davvero saperne di più su questo, questo è il miglior libro sul mercato, Grady Booch è stato il padre di UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 & CFTOKEN = 82813028

Oppure controlla con bitmonkey. C'è un gruppo con cui sono sicuro che potresti imparare molto.

>

Se sapessimo cosa significa veramente la terminologia non avremmo bisogno di imparare nulla.

>


0

Se hai bisogno di un Docker Container CakePHP con MySQL, ho creato un'immagine Docker a tale scopo! Non c'è bisogno di preoccuparsi di configurarlo. Funziona e basta!

Ecco come ho installato nell'immagine basata su 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 creazione e l'esecuzione dell'applicazione è solo un processo in 2 fasi (considerando che ti trovi nella directory corrente dell'app):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp

Nel caso qualcuno provi a farlo con un container sudo /etc/init.d/apache2 restart
Docker
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.