Instalación del controlador PDO en el servidor MySQL Linux

102

Se me sugirió, no hace mucho, cambiar mi código para usar PDO con el fin de parametrizar mis consultas y guardar HTML de forma segura en la base de datos.

Bueno, aquí están los principales problemas:

  1. Miré http://php.net/manual/en/ref.pdo-mysql.php , y realmente no llegué a donde debería poner esa $ ./configure --with-pdo-mysqlcadena ...

  2. El sitio que estoy construyendo en realidad solo requiere PDO para una página. Si bien puedo considerar volver a escribirlo, tomaría un tiempo y necesito que las páginas se ejecuten pronto, por lo que no puedo apagar MySQL por completo. Si instalo PDO, ¿podré seguir utilizando mysql_*controladores?

El servidor en cuestión está ejecutando PHP Versión 5.4.6-1ubuntu1 y Apache / 2.2.22 (Ubuntu). También estoy ejecutando una base de datos phpMyAdmin, si es importante.

Yuri Scarbaci
fuente

Respuestas:

183

En Ubuntu, debería poder instalar las partes PDO necesarias desde apt usando sudo apt-get install php5-mysql

No hay limitación entre usar PDO y mysql_ simultáneamente. Sin embargo, necesitará crear dos conexiones a su base de datos, una con mysql_ y otra usando PDO.

Jani Hartikainen
fuente
1
bien, miré hacia arriba en mi archivo php.ini y parece que pdo está habilitado de forma predeterminada, todavía necesito saber si puedo usar los controladores pdo y mysql_ * ...
Yuri Scarbaci
1
@ YuriCollector'sEditionRossi Actualizó la respuesta para eso.
Jani Hartikainen
1
Vale la pena mencionar que debe reiniciar Apache luego para que se apliquen los cambios.
Adam F
1
@jonaspas si está en ubuntu, intente actualizar con y sudo apt-get updateluego ejecute la instalación original desde la respuesta.
ryAn_Hdot
14
¡Gracias ryAn_Hdot! Pero eso tampoco funcionó para mí. Mi solución ahora: estaba ejecutando php7 y tenía que hacerlosudo apt-get install php-mysql
johnnydoe82
25

Esa es una buena pregunta, pero creo que simplemente malinterpretas lo que lees.

Instalar PDO

El ./config --with-pdo-mysqles algo que tienes que poner en solamente si compila su propio código PHP. Si lo instala con administradores de paquetes, solo tiene que usar la línea de comando proporcionada por Jany Hartikainen: sudo apt-get install php5-mysqly tambiénsudo apt-get install pdo-mysql

Compatibilidad con mysql_

Aparte del hecho de que mysql_ está realmente desaconsejado, ambos son independientes. Si usa PDO, mysql_ no está implicado, y si usa mysql_, no se requiere PDO.

Si apaga PDO sin cambiar ninguna línea en su código, no tendrá ningún problema. Pero desde que comenzó a conectarse y escribir consultas con PDO, debe conservarlo y renunciar a mysql_.

Hace varios años, el equipo de MySQL publicó un script para migrar a MySQLi . No sé si se puede personalizar, pero es oficial.

artragis
fuente
Entonces, si quiero usar ambos al mismo tiempo, ¿tendré que usar ambos métodos de conexión? lo que quiero decir es: tengo como 50 páginas ya ejecutándose, con mucho código, me tomó como un año de desarrollo y no puedo retroceder solo una página, no ahora de todos modos ... lo que tengo que hacer es hacer que esas 50 páginas se ejecuten como están, y esta página que estoy escribiendo ahora usando pdo, ¿es posible? gracias por tu tiempo ^^
Yuri Scarbaci
La refactorización puede ser útil si tiene que cambiar mucho código. Pero eso sí, si quieres usar ambos, tienes que establecer dos conexiones.
artragis
¿Existe una razón fácil para refactorizar mi código? Actualmente estoy trabajando en un trabajo que no comencé yo mismo, lo hizo otro programador que lo dejó fuera, y ahora tengo que adaptarme a su código ... es un poco duro ya que cada uno tiene su propio estilo, así que prefiero dejarlo como está por ahora, ya que este software se usó hasta ahora sin ningún problema ... gracias por cierto ^^ ¿necesito cerrar la conexión mysql antes de abrir el pdo, o puedo tener ambos abiertos en ¿al mismo tiempo? ^^
Yuri Scarbaci
1
tal vez pueda usar un IDE como netbeans o eclipse
artragis
1
Encontré un script que le permite migrar a mysqli, y quizás a PDO
artragis
17

¡Básicamente, la respuesta de Jani Hartikainen es correcta! Elegí su respuesta. Lo que faltaba en mi sistema (basado en Ubuntu 15.04) era habilitar la extensión PDO en mi php.ini

extension=pdo.so
extension=pdo_mysql.so

reinicie el servidor web (por ejemplo, con "sudo service apache2 restart") -> cada multa :-)

Para encontrar dónde se encuentra su archivo php.ini activo actual, puede usar phpinfo () o algunas otras sugerencias desde aquí: https://www.ostraining.com/blog/coding/phpini-file/

Tobias Gaertner
fuente
Trabajó para mi. Gracias. +1
Marcel
1
No tenía estas líneas en mi archivo php.ini. Solo lo he hecho extension=pdo_mysql.dll, así que descomenté eso y reinicié Apache y funcionó.
user3494047
@ user3494047 Supongo que estás en un sistema Windows. Tomé el ejemplo de configuración de un sistema Linux. ¡Pero genial que hayas compartido tu experiencia!
Tobias Gaertner
En realidad, es un ubuntu 14.04
user3494047
¡Gracias! Debo haber ejecutado una docena de sudo apt-get install...comandos y nada funcionó, finalmente agregando estas dos líneas al php.ini lo hice. Sólo mencionar el comando reiniciar el servidor Apache que se ejecuta después de guardar: sudo service apache2 restart. Y mi ruta de archivo php.ini era /etc/php/7.0/apache2/php.ini(SO: Lubuntu 16.04, análogo a Ubuntu para estos fines). Ejecutar sudo gedit <fullpath>para editarlo. (gedit o geany o cualquier editor de texto en su sistema)
Nikhil VJ
10

Al principio, instale las partes PDO necesarias ejecutando el comando sudo apt-get install php*-mysqldonde * es un nombre de versión de php como 5.6, 7.0, 7.1, 7.2 Después de la instalación, debe mencionar (descomentar si ya está allí) estas dos declaraciones

extension=pdo.so
extension=pdo_mysql.so

en su archivo .ini y reinicie su servidor por comando

sudo service apache2 restart
Avnish alok
fuente
Esta respuesta no agrega información nueva, por lo que en mi opinión no es útil.
Tobias Gaertner
1
Esta respuesta fue extremadamente útil porque señaló que necesita el número de versión de PHP en formato php*-mysql. ¡Lo estaba intentando php-mysqly fue php7-mysqlen vano y luego esta respuesta selló el trato! ¡Gracias!
jedmao
Trabajó para mi. Gracias.
Mahir Altınkaya
@ MahirAltınkaya Gald, ayudó.
Avnish alok
8
  1. PDO son las siglas de PHP Data Object.
  2. PDO_MYSQL es el controlador que implementará la interfaz entre el objeto de datos (base de datos) y la entrada del usuario (una capa debajo de la interfaz de usuario llamada "código subyacente") para acceder a su objeto de datos, la base de datos MySQL.

El propósito de usar esto es implementar una capa adicional de seguridad entre la interfaz de usuario y la base de datos. Al usar esta capa, los datos se pueden normalizar antes de insertarse en su estructura de datos. (Las mayúsculas son mayúsculas, sin espacios iniciales ni finales, todas las fechas están formadas correctamente).

Pero hay algunos matices en esto que quizás no conozca.

En primer lugar, hasta ahora, probablemente haya escrito todas sus consultas en algo similar a la URL y haya pasado los parámetros utilizando la propia URL. Usando el PDO, todo esto se hace bajo el nivel de interfaz de usuario. La interfaz de usuario entrega el balón al PDO que lo lleva al campo y lo coloca en la base de datos para un TOUCHDOWN de 7 puntos ... obtiene siete puntos, porque lo consiguió y lo hizo de manera mucho más segura que pasar información a través de la URL .

También puede reforzar su sitio para la inyección SQL mediante el uso de una capa de datos. Al usar esta capa intermedia que es el ÚNICO 'jugador' que habla con la base de datos, estoy seguro de que puede ver cómo esto podría ser mucho más seguro. Interfaz a capa de datos a base de datos, capa de datos a base de datos a capa de datos a interfaz.

Y:

Al implementar las mejores prácticas mientras escribe su código, estará mucho más satisfecho con el resultado.

Fuentes adicionales:

Re: Funciones de MySQL en la url php dot net / manual / en / ref dot pdo-mysql dot php

Re: arquitectura de tres niveles: agregando seguridad a sus aplicaciones https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re: Diseño orientado a objetos usando UML Si realmente quieres aprender más sobre esto, este es el mejor libro del mercado, Grady Booch fue el padre de UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 y CFTOKEN = 82813028

O consulte con bitmonkey. Hay un grupo con el que estoy seguro de que podrías aprender mucho.

>

Si supiéramos lo que realmente significa la terminología, no necesitaríamos aprender nada.

>

Elaine Ossipov
fuente
0

Si necesita un contenedor Docker de CakePHP con MySQL, ¡he creado una imagen de Docker para ese propósito! No hay necesidad de preocuparse por configurarlo. ¡Simplemente funciona!

Así es como lo instalé en una imagen basada en 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 construcción y ejecución de su aplicación es solo un proceso de 2 pasos (considerando que se encuentra en el directorio actual de la aplicación):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp
Marcello de Sales
fuente
En caso de que alguien intente hacer esto con un contenedor docker que ya se sudo /etc/init.d/apache2 restartesté ejecutando: es necesario reiniciar el servidor Apache
MajorBreakfast