2011-08-04 5 views
0

Zend 애플리케이션을 공유 서버에서 실행중인 MySQL 프로세스에 연결하려고합니다. 기본 설정은 LAMP 서버로 작업 중이므로 잘되어야합니다. myprocess.db보다는 localhost : 그러나Zend로 SQL 프로세스에 연결

resources.db.adapter = PDO_MYSQL 
resources.db.params.charset = "utf8" 
resources.db.params.host = mysqlprocess.db 
resources.db.params.username = username 
resources.db.params.password = password 
resources.db.params.dbname = dbname 

, 내가 할 때, 나는이 얻을 :

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: 
Can't connect to local MySQL server through socket 'please_see_the_faq' (2) 
in /f5/metamusic/protected/application/controllers/SearchController.php on line 418 
을 문제가

, 내가는 SQL 처리로서 호스트를 지정해야

내가 사용하는 호스트가 NearlyFreeSpeech이고 관심있는 프로세스를 지정하지 않고 SQL에 연결하려고하면이 메시지가 표시됩니다. http://faq.nearlyfreespeech.net/section/mysql/mysqllocalhost#mysqllocalhost

동일한 세부 정보와 mysql_connect($server, $user)을 사용하면 Zend가 올바른 호스트 매개 변수를 사용하지 않는 것처럼 보입니다.

어떤 아이디어가 잘못 되었나요? 어떤 도움이라도 대단히 감사 할 것입니다.

답변

0

: 데이터베이스 연결이 이미을 일하고

그것은 밝혀

, .그러나 mysql_real_escape_string()에 대한 호출이 실패하여 전체 데이터베이스 연결이 실패했다는 오류 메시지가 표시되었습니다.

해결책은 위의 호출을 Zend_DB_Adapter의 quote()으로 대체하기 만하면 갑자기 모든 것이 작동합니다.

LAMP 컴퓨터에서 작동하고 공유 서버가 아닌 이유는 무엇입니까? 지금은 그렇다고해도 충분히 좋은 해결책입니다!

+0

문제가 발견되어 반가워요. 이제 오류 메시지에서 mysql_real_escape_string()을 보지 못한 이유에 대해 당황 스럽다. 왜 LAMP 시스템에 하나 이상의 MySQL 프로세스가 있지만 하나의 기본 프로세스가 없기 때문에 이것이 공유 서버에서 작동하지 않는 이유에 대한 답은 간단 할 것 같습니다. –

0

는 데이터베이스 서버를 가리 키도록 dB의 설정에

resources.db.params.host = myprocess.db

+0

죄송합니다. 행운을 두려워합니다. 실제로는 '호스트'였지만 필자는 'unix_socket'과 'server'를 절망적으로 시도했다. 더 혼란을 피하기 위해 질문을 편집하겠습니다. –

0

호스트를했습니다 사용해보십시오. localhost 또는 127.0.0.1은 응용 프로그램과 동일한 서버에있는 데이터베이스에 대한 참조입니다. 호스팅 환경에서 일반적으로 서버는 원격 서버에 있으므로 호스트는 호스트의 IP 주소 또는 DNS 이름이어야합니다.

FAQ의 두 번째 질문을 확인하십시오.

업데이트
저의 경우 DSN이 아닌 DNS입니다. 여전히 그게 문제입니다. config의 resources.db.params.host 지시문은 데이터베이스 서버에 대한 참조를 예상하며 myprocess.db은 DNS 이름이나 IP 주소가 아닙니다. 아마도 localhost가 필요하지만 DSN이 누락 된 것입니다. 현재 MySQL 용 PHP에서 DSN을 어떻게 설정했는지, 따라서 Zend를 설정하는 방법을 알지 못합니다. 이 MYSQL DSN을 자세히 살펴보십시오.

업데이트 2 올바른 소켓이며 관련이 있습니다. 문제는 Zend PDO_MYSQL 어댑터라고 생각합니다. Zend는 이것을 PDO()로 직접 퍼널합니다. Zend 구현에서 빠진 위에서 언급 한 추가 설정 옵션 (MYSQL DSN)이 있습니다. PDO_MYSQL 어댑터가 connect() 메소드를 대체하지만이 옵션을 찾지 않습니다.

그러나 실제로는 mysql_connect()으로 테스트와 같은 방식으로 다른 어댑터 mysqli이 MySQL에 직접 연결됩니다. 대신 mysqli_real_connect()을 사용하며 연결에서 소켓의 프로세스 이름을 이해할 수 있습니다. 그래서, 당신은 당신의 설정에서 다음을 시도 할 수 있습니다 : 나는 나중에 참조 할 수 있도록 여기 내 최종 솔루션을 게시하도록하겠습니다

resources.db.adapter = "mysqli" 
+0

그래, 나는 그것을 읽었다. - 별칭'yourprocessname.db'를 사용한다고하는데, 이것은 내가하고있는 일이다. 이것은 설명하는 페이지입니다 : http://i.imgur.com/qK4oU.png. –

+0

@danH 내 업데이트 –

+0

을보십시오. 음, PHP의 mysql_connect()에서'processname.db'를 매개 변수로 사용하는 것이 맞습니다. 방금 Zend 소스를 살펴 봤는데'sqlsrv_connect ($ serverName, $ connectionInfo); '를 사용하는 것 같습니다. –

관련 문제