2014-01-26 5 views
1

이 질문에 대한 여러 가지 관련 답변을 살펴 보았지만이 사례에 적용되는 답변을 찾을 수 없습니다.문자열 변환에 대한 연관 배열

$DatabaseConfig = array('DB_TYPE' => 'MySQL', 
         'DB_HOST' => 'localhost', 
         'DB_NAME' => 'simpleCMS', 
         'DB_USER' => 'root', 
         'DB_PASS' => 'mypass'); 

$dsn = $this->DatabaseConfig['DB_TYPE'].':host='.$this->DatabaseConfig['DB_HOST'].';dbname='.$this->DatabaseConfig; 

나는 Notice: Array to string conversion이되어 연결이 없습니다.
매개 변수를 수동으로 삽입하면 모든 것이 잘 작동합니다.

이 경우 키 값을 문자열로 변환하는 방법은 무엇입니까? 나는 다양한 장소에 (string)을 놓으려고했으나 행운이 없었다.
약간의 관련이 없지만, 누군가가 이것을 만드는 것에 대한 생각이 있다면 $dsn 조금 덜 장황합니까? 나는 더 깨끗한 디자인을 찾을 수 없었다.

편집은 모두 그냥 마지막 매개 변수 누락 된 지적 감사합니다. Notice: Array to string conversion은 더 이상 볼 수 없습니다.
나는 생각하지만, 새로운 치명적인 오류 제시 :
Fatal error: Call to undefined method PDOException::query()
그리고 PDOException :
exception 'PDOException' with message 'could not find driver'

하지만 매개 변수를 수동으로 입력 할 때 다시 연결이 잘 작동합니다.
$dsn의 현재 형식이 허용되지 않는 이유는 무엇입니까?

+0

아마도 $ this-> DatabaseConfig = array (...); ' –

+0

결국, ''; dbname = '. $ this-> DatabaseConfig ['DB_NAME ']'이 필요합니다.(마지막에'[ 'DB_NAME'] '가 없습니다.) – bishop

+0

업데이트 후에 더 많은 코드를 게시해야합니다. 당신은 어떻게 든 PDO 실패로부터 잡힌 예외에 대해'query()'를 호출했다. 연결이 성립 된 곳의 코드와'query()'를 호출하는 곳을 게시하십시오. –

답변

0

PDO 드라이버 이름은 분명히 대소 문자를 구분합니다. 우려 mysql 대신 MySQL

$DatabaseConfig = array('DB_TYPE' => 'mysql', 
         'DB_HOST' => 'localhost', 
         'DB_NAME' => 'simpleCMS', 
         'DB_USER' => 'root', 
         'DB_PASS' => 'mypass'); 

으로 추가 원인을 사용하여,이 오류 메시지는 당신이 실제로 PDOException 인 객체에 query()를 호출하려고 노력을 의미한다. PDO 개체를 설정 한 귀하의 try/catch 논리는 귀하가 게시하지 않았더라도 추가주의를 보장합니다. PDO 객체를 저장하고있는 변수가 예외 처리에 의해 다시 사용되지 않는지 확인하십시오.

Fatal error: Call to undefined method PDOException::query()

0

제공 한 내용에 따라 다음은 어레이에 액세스하는 방법입니다. 왜 당신은 객체 표기법을 사용하고 있는지 모르십니까?

$dsn = $DatabaseConfig['DB_TYPE'].':host='.$DatabaseConfig['DB_HOST'].';dbname='.$DatabaseConfig**['DB_NAME']**;

$DatabaseConfig = array('DB_TYPE' => 'MySQL', 'DB_HOST' => 'localhost', 'DB_NAME' => 'simpleCMS', 'DB_USER' => 'root', 'DB_PASS' => 'mypass');

(당신은 DB_NAME 키를 누락했다)하지만, 당신은 또한 귀하의 원래 스크립트에 문제가 있었다 ', DBNAME을 ='$ DatabaseConfig.;

액세스 할 어레이 키를 지정하지 않았습니다. $ DatabaseConfig 만 지정했습니다. 여기서 "Array to string"오류가 발생합니다.

+0

개체 표기법은 트리밍 된 코드로 인해 발생하는 것으로 간주됩니다.이 코드는 어딘가에 개체 메서드에 나타납니다. –

0

귀하의 최종 설정이없는 것 같다 ($ this-> DatabaseConfig [ 'DB_NAME']) :

$DatabaseConfig = array('DB_TYPE' => 'MySQL', 
        'DB_HOST' => 'localhost', 
        'DB_NAME' => 'simpleCMS', 
        'DB_USER' => 'root', 
        'DB_PASS' => 'mypass'); 

$dsn = $this->DatabaseConfig['DB_TYPE'].':host='.$this->DatabaseConfig['DB_HOST'].'; 
dbname='.$this->DatabaseConfig['DB_NAME']; 
0
$dsn = $this->{DatabaseConfig}['DB_TYPE'].':host='.$this->{DatabaseConfig}['DB_HOST'].';dbname='.$this->{DatabaseConfig};