2009-11-13 2 views
0

SQLite를 MySQL로 전환하는 중입니다. 그것은 SQLite와 함께 작동하며 MySQL을 사용하도록 변경 한 지금은 작동하지 않습니다. 다음은 내가받는 오류 메시지입니다.젠드 프레임 워크 : 인증, SQLite에서 전환 할 때의 MySQL 오류

Message: SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using old authentication 

이것은 무엇을 의미합니까?

참고 : 로컬로 실행중인 Snow Leopard를 실행 중이고 원격 데이터베이스에 액세스하려고합니다.

또한 약간의 불안정한 요청 매개 변수에 일반 사용자 이름과 암호를 일반 텍스트로 화면에 표시합니다.

+0

DB 사용자 이름과 암호는 오류가 프로덕션 서버에 표시되지 않아야 하나의 이유있는 문제를 :) 해결합니다. –

+0

데이터베이스 사용자 이름/암호가 아니라 내 앱의 사용자 로그인 자격증 명. 또한 프로덕션 서버에서는 실행되지 않습니다. 내 컴퓨터와 개발 모드에서. 프로덕션 모드에서는 오류가 해제됩니다. – Andrew

답변

0

Andrew 이전 인증을 사용하여 MySQL 클라이언트에 문제가 있다고 생각합니다.

PDO가 마지막 mysqlclient 라이브러리를 사용하고 있는지 확인해야합니다.

먼저 PDO 샘플을 테스트하여 모든 것이 잘되고 ZF로 재생 한 후에 테스트 할 수 있습니다. Usernamer/비밀번호에 대한 발언에

$db = new PDO("mysql:host=$host;dbname=$database", 
      $username, $password); 

는 젠드 프레임 워크 내용은 해당 진술되어 생산 및 개발에 구성의 다른 수준을 설정하여 사용자에게 그 오류를 표시하지 않는 개발자입니다. Zend_config이 거기에 더하기 error catching controller입니다.

+0

이것은 프로덕션 서버에서 실행되고 있지 않습니다. 내 컴퓨터와 개발 모드에서. 따라서 display_errors는 프로덕션 모드에서 해제됩니다. – Andrew

+0

내 MySQL 서버가 오래 되었습니까? 아니면 PDO_MYSQL이 오래 되었습니까? 내 PDO_MYSQL은 Zend Framework, 로컬 PHP 설치 또는 로컬 MySQL 설치입니까? – Andrew

+0

프로덕션 서버에서 앱을 사용해 보았지만 문제가 발생하지 않았습니다. 이 오류가 다시 발생하지 않도록 내 로컬 (로컬)에서 업데이트해야합니까? – Andrew

4

PHP 5.3을 실행하고 있습니까? mysqlnd은 PHP 용 새로운 네이티브 MySQL 드라이버입니다 (ext/mysql, ext/mysqliPDO). heremysqlnd에 대한 멋진 기사입니다. 새로운 API는 아니지만 새로운 API는 3 가지 API와 어떻게 통신 할 수 있습니까? .

이제 문제는 MySQL 서버가 mysqlnd이 준수 할 수없는 old authentication mechanism을 사용한다는 것입니다. mysqlnd에는 MySQL 4.1에서 도입 된 새로운 41 바이트 암호가 필요합니다 (따라서 MySQL 서버 < 4.1에 연결할 수 없습니다). 당신이 당신의 MySQL 서버에 SET PASSWORD 명령을 사용하여이 새 암호 방식, 예컨대 :

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword'); 

이 암호 방식을 변경하고 mysqlnd와 연결할 수를 사용하는 사용자 테이블을 업데이트합니다. Here Thomas Rabaix는 정확하게 동일한 문제를 설명합니다.

0

사용이

SET SESSION old_passwords = 0; 
SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc')); 
SET PASSWORD = PASSWORD('abc') 

행운