Instalando o driver PDO no servidor MySQL Linux

102

Foi sugerido, não muito tempo atrás, alterar meu código para usar PDO a fim de parametrizar minhas consultas e salvar HTML com segurança no banco de dados.

Bem, aqui estão os principais problemas:

  1. Eu olhei em http://php.net/manual/en/ref.pdo-mysql.php , e eu realmente não entendi onde devo colocar essa $ ./configure --with-pdo-mysqlstring ...

  2. O site que estou construindo, na verdade, requer apenas PDO para uma página. Embora eu possa considerar reescrevê-lo, demoraria um pouco e preciso que as páginas estejam sendo executadas em breve, então não posso desligar o MySQL completamente. Se eu instalar o PDO, ainda poderei usar mysql_*manipuladores?

O servidor em questão está executando o PHP versão 5.4.6-1ubuntu1 e Apache / 2.2.22 (Ubuntu). Também estou executando um banco de dados phpMyAdmin, se isso importa.

Yuri Scarbaci
fonte

Respostas:

183

No Ubuntu você deve ser capaz de instalar as partes PDO necessárias do apt usando sudo apt-get install php5-mysql

Não há limitação entre usar PDO e mysql_ simultaneamente. No entanto, você precisará criar duas conexões com seu banco de dados, uma com mysql_ e outra usando PDO.

Jani Hartikainen
fonte
1
ok, eu procurei no meu arquivo php.ini e parece que o pdo está ativado por padrão, eu ainda preciso saber se posso usar os manipuladores pdo e mysql_ * ...
Yuri Scarbaci
1
@YuriCollector'sEditionRossi Atualizada a resposta para isso.
Jani Hartikainen de
1
Vale a pena mencionar que você precisa reiniciar o apache depois para que as alterações sejam aplicadas.
Adam F
1
@jonaspas se você estiver no ubuntu, tente atualizar com sudo apt-get updatee execute a instalação original a partir da resposta.
ryAn_Hdot
14
Obrigado ryAn_Hdot! Mas isso também não funcionou para mim. Minha solução agora: eu estava executando o php7 e tinha que fazersudo apt-get install php-mysql
johnnydoe82 de
25

Essa é uma boa pergunta, mas acho que você apenas entendeu mal o que leu.

Instale PDO

Isso ./config --with-pdo-mysqlé algo que você precisa colocar apenas se compilar seu próprio código PHP. Se você instalá-lo com gerenciadores de pacotes, basta usar a linha de comando fornecida por Jany Hartikainen: sudo apt-get install php5-mysqle tambémsudo apt-get install pdo-mysql

Compatibilidade com mysql_

Além do fato de mysql_ ser realmente desencorajado, ambos são independentes. Se você usar PDO, mysql_ não está implicado e se você usar mysql_ PDO não é necessário.

Se você desligar o PDO sem alterar nenhuma linha em seu código, não terá problemas. Mas desde que você começou a conectar e escrever consultas com PDO, você tem que mantê-lo e desistir do mysql_.

Vários anos atrás, a equipe do MySQL publicou um script para migrar para o MySQLi . Não sei se pode ser customizado, mas é oficial.

Artragis
fonte
então se eu quiser usar os dois ao mesmo tempo, terei que usar os dois métodos de conexão? o que quero dizer é: tenho cerca de 50 páginas em execução, com muito código, demorou um ano de desenvolvimento e não posso voltar atrás apenas uma página, pelo menos não ... o que eu preciso fazer é ter essas 50 páginas rodando como estão, e esta página que estou escrevendo agora usando pdo, é mesmo possível? obrigado pelo seu tempo ^^
Yuri Scarbaci
a refatoração pode ser útil se você tiver que alterar muito código. Mas sim, se você quiser usar os dois, você deve estabelecer duas conexões.
artragis
existe um motivo fácil para refatorar meu código? Atualmente estou trabalhando em um trabalho que não iniciei sozinho, foi feito por outro programador que o deixou de fora, e agora tenho que me adaptar ao código dele ... é um pouco difícil, já que cada um tem seu próprio estilo, então eu prefiro deixar como está por enquanto, já que este software foi usado até agora sem nenhum problema ... thx btw ^^ eu preciso fechar a conexão mysql antes de abrir o pdo, ou posso abrir ambos em o mesmo tempo? ^^
Yuri Scarbaci
1
talvez você possa usar um IDE como netbeans ou eclipse
artragis
1
Eu encontrei um script que permite a você migrar para mysqli, e talvez para PDO
artragis
17

Basicamente, a resposta de Jani Hartikainen está certa! Eu votei positivamente em sua resposta. O que faltava no meu sistema (baseado no Ubuntu 15.04) era habilitar a extensão PDO no meu php.ini

extension=pdo.so
extension=pdo_mysql.so

reinicie o servidor web (por exemplo, com "sudo service apache2 restart") -> cada multa :-)

Para descobrir onde seu arquivo php.ini ativo atual está localizado, você pode usar phpinfo () ou algumas outras dicas aqui: https://www.ostraining.com/blog/coding/phpini-file/

Tobias Gaertner
fonte
Funcionou para mim. Obrigado. +1
Marcel
1
Eu não tinha essas linhas no meu arquivo php.ini. Eu só fiz extension=pdo_mysql.dll, então descomentei isso e reiniciei o apache e funcionou.
user3494047
@ user3494047 Acho que você está em um sistema Windows. Peguei o exemplo de configuração de um sistema Linux. Mas que bom que você compartilhou sua experiência!
Tobias Gaertner
Na verdade, é um ubuntu 14.04
user3494047
Obrigado! Devo ter executado uma dúzia de sudo apt-get install...comandos e nada funcionou, finalmente adicionando essas duas linhas ao php.ini fez isso. Apenas mencionar o reinício comando do servidor Apache que você executa depois de salvar: sudo service apache2 restart. E o caminho do meu arquivo php.ini era /etc/php/7.0/apache2/php.ini(OS: Lubuntu 16.04, análogo ao Ubuntu para esses fins). Corra sudo gedit <fullpath>para editá-lo. (gedit ou geany ou qualquer editor de texto em seu sistema)
Nikhil VJ
10

Primeiro instale as partes PDO necessárias executando o comando sudo apt-get install php*-mysqlonde * é o nome da versão do php como 5.6, 7.0, 7.1, 7.2. Após a instalação, você precisa mencionar (descomente se já estiver lá) essas duas declarações

extension=pdo.so
extension=pdo_mysql.so

em seu arquivo .ini e reinicie seu servidor por comando

sudo service apache2 restart
Avnish alok
fonte
Esta resposta não adiciona nenhuma informação nova - portanto, não é útil.
Tobias Gaertner
1
Esta resposta foi extremamente útil porque indicou que você precisa do número da versão do PHP em php*-mysql. Eu estava tentando php-mysqle php7-mysqlsem sucesso e então essa resposta selou o acordo! Obrigado!
jedmao
Funcionou para mim. Obrigado.
Mahir Altınkaya
@ MahirAltınkaya Gald, ajudou.
Avnish alok
8
  1. PDO significa PHP Data Object.
  2. PDO_MYSQL é o driver que implementará a interface entre o objeto de dados (banco de dados) e a entrada do usuário (uma camada sob a interface de usuário chamada "code behind") acessando seu objeto de dados, o banco de dados MySQL.

O objetivo de usar isso é implementar uma camada adicional de segurança entre a interface do usuário e o banco de dados. Usando esta camada, os dados podem ser normalizados antes de serem inseridos em sua estrutura de dados. (Capitais são maiúsculas, sem espaços à esquerda ou à direita, todas as datas devidamente formadas.)

Mas existem algumas nuances que você pode não estar ciente.

Em primeiro lugar, até agora, você provavelmente escreveu todas as suas consultas em algo semelhante ao URL e passou os parâmetros usando o próprio URL. Usando o PDO, tudo isso é feito no nível da interface do usuário. A interface do usuário passa a bola para o PDO, que a carrega para o campo e a planta no banco de dados para um TOUCHDOWN de 7 pontos. .

Você também pode proteger seu site para injeção de SQL usando uma camada de dados. Ao usar essa camada intermediária que é o ÚNICO 'player' que fala com o próprio banco de dados, tenho certeza de que você pode ver como isso poderia ser muito mais seguro. Interface para camada de dados para banco de dados, camada de dados para banco de dados para camada de dados para interface.

E:

Ao implementar as melhores práticas ao escrever seu código, você ficará muito mais feliz com o resultado.

Fontes adicionais:

Re: Funções MySQL no url php ponto net / manual / en / ref ponto pdo-mysql ponto php

Re: arquitetura de três camadas - adicionando segurança aos seus aplicativos https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re: Projeto Orientado a Objetos usando UML Se você realmente deseja aprender mais sobre isso, este é o melhor livro do mercado, Grady Booch foi o pai da UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 & CFTOKEN = 82813028

Ou verifique com o bitmonkey. Há um grupo lá com quem tenho certeza que você poderia aprender muito.

>

Se soubéssemos o que a terminologia realmente significa, não precisaríamos aprender nada.

>

Elaine Ossipov
fonte
0

Se você precisa de um Container Docker CakePHP com MySQL, criei uma imagem Docker para esse propósito! Não precisa se preocupar em configurá-lo. Simplesmente funciona!

Veja como instalei uma imagem baseada no 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

Construir e executar seu aplicativo é apenas um processo de 2 etapas (considerando que você está no diretório atual do aplicativo):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp
Marcello de Sales
fonte
Caso alguém tente fazer isso com um contêiner do docker já em execução: sudo /etc/init.d/apache2 restarté necessário reiniciar o servidor apache
MajorBreakfasts