2013-03-11 1 views
1

비 -Windows OS에서 MS SQL Server와 함께 ZF2를 사용하는 표준 방법은 무엇입니까?* nix에서 Zend Framework 2를 MS SQL Server와 함께 사용하는 방법?

documentation에서 알 수 있듯이 Sqlsrv 드라이버는 공식적으로 지원되며 Windows 플랫폼에서만 작동합니다.

ZF1에서 Pdo_Mssql 어댑터를 사용하고 pdoTypedblib으로 지정했습니다. ZF2에서 비슷한 작업을 수행하는 것에 대한 참조를 찾을 수 없습니다.

은 분명히 주요 refactoring 동안 제거 시간 전에 PDO \ MSSQL 드라이버가 있었다, 그러나 나는 Pdo_Dblib를 사용하는 현재 문서화 방법을 볼 수 없습니다.

위의 어댑터 설명서에 따르면 어댑터 구성의 드라이버를 Pdo=OtherPdoDriver으로 설정할 수 있지만이 사용법에 대한 문서화 된 예제는 없습니다. Pdo=Pdo_Dblib 또는 Pdo=dblib을 사용할 수 있으며 자동으로 작동합니까?

사용할 수있는 대안이지만 PDO ODBC 드라이버에 대한 참조가 발견되었지만 문서 나 코드 참조를 찾을 수 없습니다.

+0

거기에'Zend \ Db \ Adapter \ Driver \ Sqlsrv'가 있습니다. sqlsrv는 (Microsoft에 의해) PHP 확장 기능입니다. 테스트 할 것이 없지만 둘을 결합하면 해결책을 제공해야합니다. PHP sqlsrv 맨 페이지 -> http://php.net/manual/en/book.sqlsrv.php github zf2 드라이버 코드 -> https://github.com/zendframework/zf2/blob/master/library/Zend/Db /Adapter/Driver/Sqlsrv/Sqlsrv.php – Crisp

+0

내 질문에 언급했듯이 CFS는 nofreeusername이 제안한 답변에서 지적했듯이 Sqlsrv는 Windows 플랫폼에서만 작동합니다. 참고로 답변을 제안하는 경우 댓글 대신 답변하십시오. 그렇게하면 그 대답을 받아 들일 수 있습니다. –

+0

sqlsrv php 확장에 대한 오해의 여지가 있음을 알려 주셔서 감사합니다. 나는 겉으로보기에 일탈 한 mssql에 대한 대체품으로, 플랫폼에 의존하지 않는다는 것을 깨닫지 못했습니다. -/대답 내가 합리적으로 작동하지 않는다면 대답을 제공하지 않을 것이지만 불행히도 내가 말했듯이 나는 테스트 할 방법이 없다. 그래서 나는 가능한 해결책에 대한 힌트를 남기려했다. – Crisp

답변

1

pdo 연결을 dblib에 설정된 pdotype (pdo_dblib 확장이로드 된 상태)과 함께 사용할 수 있습니다. sqlsrv는 Windows에서만 사용할 수 있습니다.

여기 freetds 및 unixodbc가 MS SQL Server에 연결하도록 구성된 방식을 볼 수 있습니다. http://featurebug.blogspot.de/2011/01/mac-os-x-php-zend-server-ce-freetds-and.html

는 UPDATE : 여기 연결하는 연결 문자열을 사용하는 방법의 예이다 :

$db = new Zend\Db\Adapter\Adapter(
    array(
     'driver'  => 'Pdo', 
     'dsn'   => 'dblib:host=mssql_freetds;', 
     'username'  => 'mssql_username', 
     'password'  => 'mssql_password', 
     ) 
); 
+0

시도해 줘서 고마워,하지만 내 질문을 실제로 읽었습니까? 나는 Sqlsrv가 "Windows 플랫폼에서만 작동합니다"라고 분명히 인정했습니다. 또한, 나는 ZF1에서 pdo_Mssql과 pdoType with dblib을 성공적으로 사용했다. ZF2 사용과 관련하여 새로운 것을 제안하지 않았습니다. –

+0

크리스프의 의견 (답변이 있어야 함)을 언급 한 경우, 본인의 원래 질문에 제안 된 답변이 아닌 후속 의견에 포함되어 있어야합니다. –

+0

네, 질문을 읽어보십시오. ZF2 Db 어댑터를 사용하면 PDO 드라이버를 사용할 수 있으므로 PDO 연결을 사용해야합니다. MS SQL 서버에 연결하려면 pro_dblib 드라이버가 필요하고 pdoType을 dblib로 설정해야하며, 서버 측에서도 freetds와 unixodbc가 필요합니다. 이를위한 ZF2 모듈도 있습니다. 제발,이 모듈을 아직 테스트하지 않은 모습 : https://github.com/mabuzagu/PDODblibModule – nofreeusername

3

는 PHP5-Sybase에 설치한다. freetds이 설치되어 있는지 확인하십시오. /etc/freetds 아래에 freetds.conf이라는 conf 파일이 있어야합니다. 당신의 freetds.conf 파일에서

당신이해야 설정이처럼 MSSQL 연결 : (여기 예제로 ZF2 앨범 튜토리얼을 사용하여) 다음

[MyMsSqlServer] 
host = symachine.domain.com 
port = 5000 
tds version = 5.0 

,이 같은 어댑터 설정 :

return array(
    'db' => array(
     'driver'   => 'Pdo', 
     'dsn'   => 'dblib:host=MyMsSqlServer;dbname=zf2tutorial', 
     'charset'  => 'UTF-8', 
     'username'  => 'username', 
     'password'  => 'password', 
     'pdotype'  => 'dblib', 
    ), 
    'service_manager' => array(
     'factories' => array(
      'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', 
     ), 
    ), 
); 

어디서나 알려지면 알려주세요. 나는이 일을 얻는 시간의 암캐를 겪었고, 나는 이것으로 문제가있는 다른 누구를 도울 더 행복하다 !!!

0

예, odbc를 사용하여 연결할 수 있습니다. 현재 공식적으로는 지원되지 않지만 최소한의 수정만으로 쉽게 작동 할 수 있습니다.

가장 먼저해야 할 일은 기본 PHP PDO 기능을 사용하여 연결할 수 있는지 확인하는 것입니다. 그래서,이 같은 작업을 수행합니다

$resource = new PDO('odbc:driver=FreeTDS;dbname=MYDB;Server=127.0.0.1;Port=8090;UID=Testuser;PWD=testpass;', 'Testuser', 'testpass', array()); 
$s = $resource->prepare('SELECT * FROM TEST_TABLE'); 
$r=$s->execute(); 
var_dump($r); 

당신은 당신의 설정에 대한 호스트, 포트, 사용자, 패스, 테이블 이름 등을 변경해야합니다,하지만 당신은 당신이 그 세부 사항을 권리가 있는지 확인하려면이 옵션을 사용할 수 있습니다 .당신은 당신이 연결 무엇을하고 있는지 알게되면, 당신은 다음과 같이 젠드로 액세스 할 수 있습니다

$configArray = array(
    'driver' => 'pdo_odbc', 
    'driver_options' => array('driver' => 'FreeTDS'), 
    'platform' => 'Mssql', 
    'dbname' => 'MYDB', 
    'host' => '127.0.0.1', 
    'port' => 8090, 
    'user' => 'Testuser', 
    'pass' => 'testpass' 
); 

$adapter = new Zend\Db\Adapter\Adapter($configArray); 

$q = new Zend\Db\Sql\Select(); 
$q->from('TEST_TABLE'); 
$sql = $q->getSqlString($adapter->platform); 
$r = $adapter->query($sql); 
echo $r->getSql()."\n"; 
$result = $r->execute(); 
while(($res = $result->next()) !== false){ 
    print_r($res); 
} 

그러나이 실제로는 두 가지 이유로 작동하지 않습니다. 첫째, 플랫폼 - Zend에는 현재 mssql 플랫폼이 없습니다. 기본값은 sql92이며, 은 식별자를 따옴표로 묶어서 사용하기 때문에 으로 입력해야합니다.이 경우 mssql에 []으로 따옴표를 붙여야합니다. 따라서 Zend/Db/Adapter/Platform/Sql92.php를 Mssql.php로 복사하고 " 대신 []을 사용하도록 변경해야합니다.

둘째, ODBC 연결을위한 dsn에 현재 zend가 지원하지 않는 드라이버 필드가 필요하기 때문입니다. 드라이버/Pdo/Connection 클래스를 열고 connect 함수를 수정하여 $dsn[] = "driver={$options['driver']}";을 추가하고 $ pdoDriver = odbc 일 때 을 $dsn[] = "server={$hostname}";으로 바꿔야합니다.

다른 답변은 실제로 Zend 2 라이브러리의 작동 방식을 이해하지 못하는 사람들이 게시합니다. 'dsn'값을 지정하면 다른 필드는 으로 무시됩니다.입니다. 어디서나 코드에 나타나는 필드가 아니기 때문에 나는 그들이 'pdotype'에 대한 아이디어를 어디서 가지고 있는지 전혀 모른다.