2011-09-06 11 views
0

PHP 응용 프로그램 용 Kohana를 사용하고 MySql의 localhost 설치에 연결할 때 간단한 데이터베이스 테스트를 수행합니다. 그러나 웹 호스트 (Surftown)에서 원격 MySql 데이터베이스로의 연결을 변경하려고 시도하면 작동하지 않습니다.Kohana의 원격 MySql 서버에 연결할 수 없습니다.

 'hostname' => 'mydb23.surftown.se', 
     'database' => 'andclic_app', 
     'username' => 'myusername', 
     'password' => 'mypassword', 
     'persistent' => FALSE, 

그리고 내 컨트롤러에서 이것을 시도 : 여기

연결 데이터 database.php에서 ('기본'연결)이다

$default = Database::instance('default'); 
$result = $default->query(Database::SELECT, 'SELECT * FROM products', TRUE); 

하지만 내가 말하는 오류가 연결이 존재하지 않습니다 :

62  catch (Exception $e) 
63  { 
64   // No connection exists 
65   $this->_connection = NULL; 
66 
67   throw new Database_Exception(':error', 
68    array(':error' => $e->getMessage()), 
69    $e->getCode()); 
70  } 
71 
72  // \xFF is a better delimiter, but the PHP driver uses underscore 

그래서 내가 뭘 잘못하고 있니? 호스트 이름 대신 ip 번호를 사용하여 시도했지만 포트 (: 3306)를 추가하려고했지만 둘 다 도움이되지 않았습니다.

+0

데이터베이스가 localhost가 아닌 다른 연결을 허용합니까? – CodeCaster

+0

좋은 질문입니다. 아직 서버에 업로드를 시작하지 않았지만, 지금은 서버에서 제대로 작동합니다. 그러나 localhost에서 액세스 할 수 있도록 웹 호스트에 내 IP를 예외로 추가했습니다. NaviCat 또는 Visual Studio와 연결할 때 작동합니다 (예 : 하지만 로컬 호스트를 통해 실행하면 PHP 응용 프로그램에서 ... – Anders

+0

@Whatever 질문을 downvoted : 왜 downvote?만약 당신이 뭔가 이상하다고 생각한다면 적어도 왜 그런지에 대해 논평해야한다. 그렇지 않다면 당신이 생각한 바를 내가 어떻게 알 수 있을까? – Anders

답변

1

Kohana없이 원격 MySQL 서버에 연결할 수 있는지 확인하십시오. 다른 몇 가지 팁 :

Database::instance('default'); 

당신은 default을 지정할 필요가 없습니다, 그것은 기본적으로 default입니다.

$default->query(Database::SELECT, 'SELECT * FROM products', TRUE); 

쿼리를 실행할 수있는 ->execute() 메소드를 호출해야합니다.

2

이 문제는 PHP가 사용 중단 된 오류를 표시하도록 활성화 한 경우 발생합니다. mysql 드라이버는 더 이상 사용되지 않는 mysql_connect 라이브러리를 기반으로한다. 귀하의 PHP는이 라이브러리에 대한 비난 된 오류 던졌습니다 Kohana 클래스 오류를 처리 할 수 ​​없습니다. 당신이 코드의 다음 줄을 추가해야이 오류를 방지하려면 : 을 모듈 -> 데이터베이스 -> 클래스 -> kohana-> 데이터베이스 -> mysql.php 코드의 다음 줄에 대한

봐 :

//Added to suppress deprecated error due to deprecated driver 
    error_reporting(E_ALL^E_DEPRECATED); 

이 줄을 추가 한 후, 사용되지 않는 오류 코드가 억제 될 것입니다 그리고 당신은 된 mysql_connect 확장을 사용할 수 있습니다 :

// Prevent this information from showing up in traces 
    unset($this->_config['connection']['username'], $this->_config['connection']['password']); 
바로 이전 행 후 파일에 다음 줄을 추가합니다. 결국 새 지원 확장 mysqlite

이 문제는 PHP의 latests 버전 primariy 발생에 코드를 마이그레이션해야하기 때문에

이 임시 해결 방법입니다. 이전 버전의 PHP에서는이 문제가 발생하지 않습니다.

희망이 있으면이 사실을 이해하는 데 다소 시간이 걸립니다.

관련 문제