2014-01-10 4 views
5

PDO를 사용하여 외부 데이터베이스에 연결하려고합니다.PDO가 포트와 함께 작동하지 않습니다.

$dbh = new PDO('mysql:host=hotsname;port=3309;dbname=dbname', 'root', 'root'); 

그러나 이것은 내가 가지고있는 특정 서버에서 작동하지 않습니다.

아마도 특정 호스트 만 허용되었다고 생각했지만 mysql 규칙을 확인한 다음 개인적으로 연결이 설정된 서버에서이 코드를 시도했습니다.

은 그래서 코드를 작동하는 내 측면에 더 블록은 없다는 것을 방화벽이 포트 3309에 요청을 받아들이고 포트 3306

에 올바른 서버에 전달하고 있는지 그래서 문제는 전적으로 켜져 하나의 서버. 테스트로서 나는 포트를 지정하지 않고 코드를 테스트하기 위해 포트 3306을 열 것이라고 생각했습니다.

$dbh = new PDO('mysql:host=hotsname;dbname=dbname', 'root', 'root'); 

이것은 곧바로 적용됩니다.

내 질문은 왜 포트를 추가 할 때 데이터베이스에 연결할 수 없게되는지입니다. 이 문제가있는 것은이 특정 서버뿐입니다.

많은 시간 내 주셔서 감사합니다.

업데이트

주어진 오류가 단순히 "xxx.xxx.xxx.xxx에서 MySQL 서버에 연결할 수 없습니다"입니다.

나는 조금 더 나아갔습니다. 3306을 사용하여 3306 서버로 들어오는 것을 허용하는 방화벽 규칙을 제공하면 코드가 작동합니다. 따라서 포트를 지정 했더니이 포트를 무시하고 3306에서 나가야합니다.

+0

포트 * 3309를 차단하는 * 클라이언트 * 시스템에 * 아웃 바운드 * 방화벽 규칙이있을 수 있습니까? –

+1

작동 대신 무엇을합니까? (어떤 오류가 발생합니까?) 연결하는 사용자가 연결중인 호스트에서 원격으로 연결할 권한이 있습니까? MySQL이 TCP 연결을 듣고 있습니까 ('skip-networking'은 my.cnf에서 활성화되지 않았습니다). –

+0

@MichaelBerkowski 제 질문을 업데이트했습니다. 또한'skip-networking'도 사용할 수 없습니다. 연결하는 사용자는 다른 서버에서 같은 코드를 사용하여 mysql 테이블을 검사하고 허용 된 호스트가 와일드 카드 '%'인지 확인하는 것만 큼 나에게 입증 된 사용 권한을가집니다. 확실히 문제가있는 서버가 포트를 완전히 무시하고 3306 만 사용하는 것처럼 보입니다. cpanel을 사용하는 호스팅 된 서버입니다. –

답변

0

호스트로 인해 문제가 종료되었습니다. 모든 트래픽은 코드 내에서 지정된 포트와 상관없이 3306에서 강제 실행됩니다.

5

아마 localhost을 호스트 이름으로 사용하고있을 것입니다. 대신 127.0.0.1으로 전환하면 포트 무지 문제가 해결됩니다.

+1

이것은 내 문제 (ssh를 통한 프록시 연결)를 해결했습니다. 127.0.0.1이 '제대로 작동'하는 동안 localhost가 포트를 무시하는 이유에 대한 통찰력은 무엇입니까? – seanoc5

+0

@sea MySQL은 TCP 대신 유닉스 소켓을 사용한다. 명령 줄에서 나는 같은 문제를 봤어.거기에 매개 변수를 사용하여 TCP 프로토콜을 강제로 해결할 수 있습니다 : --protocol = TCP –

+0

그리고이 답변은 PDO에서 무슨 일이 일어나고 있는지 설명합니다 ("localhost"를 사용하면 암시 적으로 소켓을 사용함) http://stackoverflow.com/questions/1819592/ error-when-connection-to-mysql-using-php-pdo –

관련 문제