예, 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'에 대한 아이디어를 어디서 가지고 있는지 전혀 모른다.
거기에'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
내 질문에 언급했듯이 CFS는 nofreeusername이 제안한 답변에서 지적했듯이 Sqlsrv는 Windows 플랫폼에서만 작동합니다. 참고로 답변을 제안하는 경우 댓글 대신 답변하십시오. 그렇게하면 그 대답을 받아 들일 수 있습니다. –
sqlsrv php 확장에 대한 오해의 여지가 있음을 알려 주셔서 감사합니다. 나는 겉으로보기에 일탈 한 mssql에 대한 대체품으로, 플랫폼에 의존하지 않는다는 것을 깨닫지 못했습니다. -/대답 내가 합리적으로 작동하지 않는다면 대답을 제공하지 않을 것이지만 불행히도 내가 말했듯이 나는 테스트 할 방법이 없다. 그래서 나는 가능한 해결책에 대한 힌트를 남기려했다. – Crisp