MySQL Linux 서버에 PDO 드라이버 설치


102

얼마 전, 쿼리를 매개 변수화하고 데이터베이스에 HTML을 안전하게 저장하기 위해 PDO를 사용하도록 코드를 변경하라는 제안을 받았습니다.

음, 여기에 주요 문제가 있습니다.

  1. 나는 http://php.net/manual/en/ref.pdo-mysql.php를 보았고 실제로 그 $ ./configure --with-pdo-mysql문자열을 넣어야 할 곳을 얻지 못했습니다 ...

  2. 내가 구축중인 사이트는 실제로 한 페이지에 PDO 만 필요합니다. 다시 작성하는 것을 고려할 수 있지만 시간이 오래 걸리고 페이지가 곧 실행되어야하므로 MySQL을 완전히 끌 수는 없습니다. PDO를 설치해도 mysql_*핸들러 를 계속 사용할 수 있습니까?

문제의 서버는 PHP 버전 5.4.6-1ubuntu1 및 Apache / 2.2.22 (Ubuntu)를 실행 중입니다. 중요한 경우 phpMyAdmin 데이터베이스도 실행하고 있습니다.

답변:


182

Ubuntu에서는 다음을 사용하여 apt에서 필요한 PDO 부품을 설치할 수 있어야합니다. sudo apt-get install php5-mysql

PDO와 mysql_을 동시에 사용하는 것에는 제한이 없습니다. 그러나 DB에 대한 두 개의 연결을 만들어야합니다. 하나는 mysql_을 사용하고 다른 하나는 PDO를 사용합니다.


1
좋아, 난 내 php.ini의 파일에 고개가, 난 아직 ... 난 PDO와 mysql_로 모두 사용할 수있는 경우 * 핸들러를 알 필요가 기본적으로 활성화에 PDO처럼 보이는
유리 Scarbaci을

1
@ YuriCollector'sEditionRossi 이에 대한 답변을 업데이트했습니다.
Jani Hartikainen 2012

1
변경 사항을 적용하려면 나중에 아파치를 다시 시작해야한다는 점을 언급 할 가치가 있습니다.
Adam F

1
@jonaspas 우분투를 사용하는 경우 업데이트를 시도한 sudo apt-get update다음 답변에서 원래 설치를 실행하십시오.
ryAn_Hdot

14
감사합니다 ryAn_Hdot! 그러나 그것은 나에게도 효과가 없었습니다. 내 솔루션은 지금 : 나는 php7를 실행하고 내가해야 할 일을했을sudo apt-get install php-mysql
johnnydoe82

25

좋은 질문이지만 읽은 내용을 오해 한 것 같습니다.

PDO 설치

이것은 여러분이 직접 PHP 코드를 컴파일 할 때만 적용./config --with-pdo-mysql 해야하는 것 입니다. : 당신은 패키지 관리자로 설치하는 경우, 당신은 단지 Jany Hartikainen에 의해 주어진 명령 줄을 사용해야 도하고sudo apt-get install php5-mysqlsudo apt-get install pdo-mysql

mysql_과의 호환성

mysql_이 정말로 권장되지 않는다는 사실을 제외하고는 둘 다 독립적입니다. PDO를 사용하는 경우 mysql_은 관련이 없으며 mysql_을 사용하는 경우 PDO가 필요하지 않습니다.

코드의 줄을 변경하지 않고 PDO를 끄면 문제가 없습니다. 그러나 PDO로 연결하고 쿼리를 작성하기 시작 했으므로이를 유지하고 mysql_을 포기해야합니다.

몇 년 전에 MySQL 팀 은 MySQLi마이그레이션 하는 스크립트를 게시했습니다 . 커스터마이징이 가능한지 모르겠지만 공식적인 것입니다.


두 가지를 동시에 사용하려면 두 연결 방법을 모두 사용해야합니까? 내 말은 : 50 페이지가 이미 실행 중이고 코드가 많고 개발하는 데 1 년 정도 걸렸고 1 페이지 만 되돌릴 수는 없습니다. 그 50 페이지가있는 그대로 실행되고이 페이지가 지금 pdo를 사용하여 작성 중인데 가능할까요? 시간 ^^ 감사
유리 Scarbaci

리팩토링은 많은 코드를 변경해야하는 경우 유용 할 수 있습니다. 하지만 네, 둘 다 사용하려면 두 개의 연결을 설정해야합니다.
artragis

내 코드를 리팩토링하는 쉬운 이유가 있습니까? 저는 현재 제 스스로 시작하지 않은 작업을하고 있습니다. 다른 프로그래머가 작업을 중단했고 이제는 그의 코드에 적응해야합니다. 모든 사람이 자신의 스타일을 가지고 있기 때문에 약간 가혹합니다. 이 소프트웨어는 지금까지 아무 문제없이 사용 되었기 때문에 지금은 그대로 두겠습니다 ... thx btw ^^ pdo 하나를 열기 전에 mysql 연결을 닫아야합니까, 아니면 둘 다 열 수 있습니다. 동시? ^^
Yuri Scarbaci 2011

1
아마도 netbeans 또는 eclipse와 같은 IDE를 사용할 수 있습니다
artragis

1
mysqli, 그리고 아마도 PDO로 마이그레이션 할 수있는 스크립트를 찾았습니다
artragis

17

기본적으로 Jani Hartikainen의 답변이 맞습니다! 나는 그의 대답을 찬성했다. 내 시스템 (Ubuntu 15.04 기반)에서 누락 된 것은 내 php.ini에서 PDO 확장을 활성화하는 것입니다.

extension=pdo.so
extension=pdo_mysql.so

웹 서버를 다시 시작합니다 (예 : "sudo service apache2 restart")-> 모든 문제 :-)

현재 활성 php.ini 파일의 위치를 ​​찾으려면 phpinfo () 또는 여기에서 다른 힌트를 사용할 수 있습니다. https://www.ostraining.com/blog/coding/phpini-file/


나를 위해 일했습니다. 감사. +1
Marcel

1
내 php.ini 파일에 이러한 줄이 없었습니다. 나는 만 가지고 extension=pdo_mysql.dll있으므로 주석을 제거하고 아파치를 다시 시작했으며 작동했습니다.
user3494047

@ user3494047 나는 당신이 Windows 시스템에 있다고 생각합니다. 나는 리눅스 시스템에서 config excample을 가져 왔습니다. 하지만 여러분의 경험을 공유해 주셔서 감사합니다!
Tobias Gaertner

사실 그것은 우분투 14.04
user3494047

감사! 12 개의 sudo apt-get install...명령 을 실행 했지만 아무것도 작동하지 않았을 것입니다. 마지막으로이 두 줄을 php.ini에 추가하면됩니다. 저장 후 실행하는 아파치 서버 재시작 명령을 언급합니다 sudo service apache2 restart. 그리고 내 php.ini 파일 경로는 /etc/php/7.0/apache2/php.ini(OS : Lubuntu 16.04, 이러한 목적을 위해 Ubuntu와 유사합니다). sudo gedit <fullpath>편집하려면 실행하십시오 . (gedit 또는 geany 또는 시스템의 모든 텍스트 편집기)
Nikhil VJ

10

먼저 명령을 실행하여 필요한 PDO 부품을 설치하십시오. sudo apt-get install php*-mysql여기서 *는 5.6, 7.0, 7.1, 7.2와 같은 php의 버전 이름입니다. 설치 후에는이 두 문장을 언급해야합니다 (이미있는 경우 주석 제거).

extension=pdo.so
extension=pdo_mysql.so

.ini 파일에서 명령으로 서버를 다시 시작하십시오.

sudo service apache2 restart

이 답변은 새로운 정보를 추가하지 않으므로 imo는 도움이되지 않습니다.
Tobias Gaertner

1
이 답변은 .NET에서 PHP 버전 번호가 필요하다는 점을 지적했기 때문에 매우 유용했습니다 php*-mysql. 나는려고 php-mysql하고 php7-mysql다음 아무 소용와이 대답은 거래를 밀봉! 감사!
jedmao

나를 위해 일했습니다. 감사.
Mahir Altınkaya 19.11.25

@ MahirAltınkaya Gald, 도움이되었습니다.
Avnish alok 19.11.26

8
  1. PDO는 PHP 데이터 개체를 나타냅니다.
  2. PDO_MYSQL은 데이터 개체 (데이터베이스)와 데이터 개체 인 MySQL 데이터베이스에 액세스하는 사용자 입력 ( "코드 숨김"이라는 사용자 인터페이스 아래의 계층) 간의 인터페이스를 구현하는 드라이버입니다.

이를 사용하는 목적은 사용자 인터페이스와 데이터베이스 사이에 추가 보안 계층을 구현하는 것입니다. 이 레이어를 사용하면 데이터를 데이터 구조에 삽입하기 전에 정규화 할 수 있습니다. (대문자는 대문자이며 선행 또는 후행 공백이 없으며 모든 날짜가 올바르게 형성됩니다.)

그러나 여러분이 알지 못하는 몇 가지 뉘앙스가 있습니다.

우선 지금까지 모든 쿼리를 URL과 유사한 것으로 작성했으며 URL 자체를 사용하여 매개 변수를 전달했습니다. PDO를 사용하면이 모든 작업이 사용자 인터페이스 수준에서 수행됩니다. 사용자 인터페이스는 공을 PDO에 넘겨주고 7 포인트 터치 다운을 위해 데이터베이스에 넣습니다. 그는 URL을 통해 정보를 전달하는 것보다 훨씬 더 안전하게 작업했기 때문에 7 포인트를 얻습니다. .

데이터 계층을 사용하여 사이트를 SQL 주입 으로 강화할 수도 있습니다 . 데이터베이스 자체와 대화하는 유일한 '플레이어'인이 중간 계층을 사용하면 이것이 훨씬 더 안전 할 수있는 방법을 알 수있을 것입니다. 데이터 레이어에서 데이터베이스로, 데이터 레이어에서 데이터베이스로, 데이터 레이어에서 인터페이스로 인터페이스합니다.

과:

코드를 작성하는 동안 모범 사례를 구현하면 결과에 훨씬 더 만족할 것입니다.

추가 출처 :

Re : URL의 MySQL 함수 php dot net / manual / en / ref dot pdo-mysql dot php

Re : 3 계층 아키텍처-애플리케이션에 보안 추가 https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re : UML을 사용한 객체 지향 디자인이 책에 대해 자세히 알고 싶다면이 책은 시장에서 가장 좋은 책입니다. Grady Booch는 UML http://dl.acm.org/citation.cfm?id=291167&CFID 의 아버지였습니다. = 241218549 & CFTOKEN = 82813028

또는 bitmonkey로 확인하십시오. 거기에 많은 것을 배울 수있는 그룹이 있습니다.

>

용어가 실제로 무엇을 의미하는지 알고 있다면 아무것도 배울 필요가 없습니다.

>


0

MySQL과 함께 CakePHP Docker Container가 필요하다면 저는 그 용도로 Docker 이미지를 만들었습니다! 설정에 대해 걱정할 필요가 없습니다. 그냥 작동합니다!

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

애플리케이션을 빌드하고 실행하는 것은 2 단계 과정에 불과합니다 (앱의 현재 디렉토리에 있다는 점을 고려).

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

누군가 이미 실행중인 도커 컨테이너를 사용하여이 작업을 시도하는 경우 : sudo /etc/init.d/apache2 restart아파치 서버를 다시 시작하는 데 필요합니다
MajorBreakfast
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.