2013-04-29 3 views
1

SQL 서버에서 MySql 서버의 데이터에 액세스하려고 시도한 후 문제가 발생했습니다. 여기까지 내가 지금까지 한 일이 있습니다.
1)이 사이트 내가 열어 내 MSQLSMS에서 지금 http://sql-articles.com/blogs/creating-linked-server-to-mysql-from-sql-server/OPENQUERY를 실행하여 MySql 서버에서 데이터를 가져 와서 PDO를 사용하여 PHP 스크립트에서 SQL 테이블에 조인 하시겠습니까?

의 지시 다음 Microsoft SQL 서버 Managment를 S (MSQLSMS) 에서 링크 서버를 생성 2) 내 SQL 서버에서 MySQL ODBC 드라이버 5.2w 설치 "SERV1"라는 서버에 연결 다음 쿼리를 실행하고 아무 문제없이 작동합니다.

SELECT 
p.team_name, 
p.fullname, 
SUM(ISNULL(i.CallDurationSeconds, 0)) AS totalTime 
FROM OPENQUERY(SERVPHP, 'SELECT 
         CAST(t.name AS CHAR) AS team_name, 
         CAST(TRIM(REPLACE(CONCAT(su.first_name, " ", su.middle_name , " ", su.last_name), " ", " ")) AS CHAR) AS fullname, 
         CAST(su.login_user AS CHAR) AS username, 
         CAST(p.account_id AS UNSIGNED) AS account_id 
         FROM call_managment_system.phone_calls AS p 
         INNER JOIN call_managment_system.users AS su ON p.owner_id = su.user_id 
         INNER JOIN call_managment_system.teams AS t ON su.team_id = t.team_id 
         WHERE p.status = 2 AND t.client_id = 1 AND p.last_attempt_on BETWEEN "2013-01-01 08:00:00" AND "2013-04-30 07:00:00" 
         GROUP BY t.team_id, p.owner_id') AS p 
INNER 
JOIN OPENQUERY(SERVPHP, 'SELECT 
         CAST(cn.contact_number AS CHAR) AS phone_number, 
         CAST(cn.account_id AS UNSIGNED) AS account_id 
         FROM call_managment_system.contact_numbers AS cn 
         WHERE cn.contact_link = "Account" 
         UNION 
         SELECT CAST(cn2.contact_number AS CHAR) AS phone_number, 
         CAST(cn2.account_id AS UNSIGNED) AS account_id 
         FROM call_managment_system.contact_personal AS cp 
         INNER JOIN call_managment_system.contact_numbers AS cn2 ON cn2.person_id = cp.person_id AND cn2.contact_link = "Account" ') AS cn ON cn.account_id = p.account_id 
INNER 
JOIN I3_IC.dbo.CallDetail AS i ON p.username = i.LocalUserId AND RIGHT(i.RemoteNumber, 10) = cn.phone_number 
WHERE i.I3TimeStampGMT BETWEEN '2013-01-01 08:00:00' AND '2013-04-30 07:00:00' 
GROUP BY p.team_name, p.fullname 

지금 나는이 쿼리를 실행하기 위해 PHP를 사용하고 있습니다. 나는 다음을 수행했습니다 1) 이전에이 쿼리를 실행 한 SQL 서버 "SERV1"에 PDO API를 사용하여 연결합니다. 2) 위와 동일한 쿼리를 실행하십시오. 하지만 이번에는 해결할 수없는 부분에서 오류가 발생합니다.

치명적인 오류 : 'SQLSTATE [42000] : [Microsoft] [SQL Server Native Client 10.0] [SQL 서버]'DBOException '오류로 인해'OLE DB 공급자 'MSDASQL의 데이터 소스 객체를 초기화 할 수 없습니다. "SERVPHP"

"SERVPHP"는 PHP 응용 프로그램이 실행되고 MySql 서버가 실행중인 서버입니다. SQL Server가 실행중인 위치와 ODBC 드라이버를 설치 한 위치가 "SERV1"입니다. 내 PHP 응용 프로그램에서이 쿼리 같은 방법으로 실행하면

더, 는 왜 지금 노력하고 있습니다

SELECT 
LocalUserId AS loginName, 
RemoteNumber AS PhoneNumber, 
SUM(CallDurationSeconds) AS totalTalk 
FROM CallDetail 
WHERE LocalUserId = 'test' AND 
I3TimeStampGMT BETWEEN '2013-01-01 08:00:00' AND '2013-04-30 07:00:00' 
GROUP BY LocalUserId, RemoteNumber 

작동? PHP 서버에서이 쿼리를 실행하려면 무엇이 필요합니까?

감사합니다.

+0

오류 메시지를 보면 서버 또는 호스트에 Microsoft 웹 사이트에서 다운로드 할 수있는 서버 기본 클라이언트가 누락 된 것 같습니다. 불행히도 설치를 찾는 데 많은 어려움을 겪었으므로 열심히 살펴야합니다. –

+0

Management Studio에서 쿼리를 실행할 수는 있지만 PHP가 아니라면 오류 메시지가 표시 될 수 있습니다. 이는 권한 또는 부족으로 인한 것일 수 있습니다. –

+0

@DanBracuk MSSQL PDO 용 드라이버를 설치하려고 할 때; 이 누락 된 드라이버로 인해 PHP에서 어떤 쿼리도 실행할 수 없습니다. –

답변

-2

위의 의견에서 제안 사항을 사용하여 허가 문제였습니다.

링크 된 서버 속성으로 이동하여 왼쪽의 "보안"메뉴를 클릭해야했습니다. 그런 다음 사용자와 암호를 추가해야했습니다. 또한 "로그인의 현재 보안 컨텍스트를 사용하여 만들었습니다"를 선택했습니다.