Programming/PHP2015. 6. 10. 17:01

프로시져 내부에 SELECT 구문이 여러개 있어서 output row을 여러개 받아야 할 경우 예시


1. 프로시져 ( MSSQL 기준 작성함...)

CREATE PROCEDURE [dbo].[spTest]
AS
BEGIN
SELECT TOP 2 log_id FROM testLog ;
SELECT TOP 2 log_id FROM testLog ;
END


2. PHP 코드

<?php
  $stmt = $conn->prepare("exec spTest");
  $stmt->execute();
  $results = array();
  do {
    $results[] = $stmt->fetchAll();
  }while ($stmt->nextRowset());
  print_r($results);
?>


3. 결과셋

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [log_id] => 1
                    [0] => 1
                )
           [1] => Array
                (
                    [log_id] => 2
                    [0] => 2
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [log_id] => 1
                    [0] => 1
                )
            [1] => Array
                (
                    [log_id] => 2
                    [0] => 2
                )
        )
)


※ 위에 예시는 거의 사용할 일이 크게 없었으며....

   아래 참고사이트에 보면 나오듯이... 게시물에 total값 별도로 output 이나 리턴 받고.. 

   요청하는 범위에 게시물의 row 수를 받을때 사용하는 일이 더 많은 듯하다....


참고사이트 

http://trentrichardson.com/2011/08/10/making-sense-of-stored-procedures-with-php-pdo-and-sqlsrv/

http://www.joeyrivera.com/2009/using-mysql-stored-procedure-inout-and-recordset-w-php/

Posted by 시니^^
Programming/PHP2014. 5. 22. 16:49
SQL Server Native를 설치해서 사용했지만 아래 링크처럼 한글 및 기타 몇가지 문제가 있는듯하여서
FreeTDS로 사용하기로 했다..

Linux uninxODBC SQL Server Native Client 11.0 한글문제 - http://www.opens.kr/35


※ SQL Server Native bind 처리도 문제있는 듯하다 ㅠㅠ

http://hbs.pe.kr/50113950707

http://connect.microsoft.com/SQLServer/feedback/details/521409/odbc-client-mssql-does-not-work-with-bound-parameters-in-subquery

※ FreeTDS bindValue 쓰면 되는 것 처럼 보이는 데 

    실제 SQL Server Profiler 해보면 prepare statement bind 안되어서 들어온다ㅠㅠ;;


PHP5.3/5.4/5.5 Yum 설치 - http://www.opens.kr/33  으로 PHP 설치 사용했다면

그냥 yum install php55w-mssql 만 설치하면 자동으로 설치가 다 된다.


1) 설치

$ yum install php55w-mssql ================================================================================== Package Arch Version Repository Size ================================================================================== Installing: php55w-mssql x86_64 5.5.12-1.w6 Installing for dependencies: freetds x86_64 0.91-2.el6 php55w-pdo x86_64 5.5.12-1.w6 unixODBC x86_64 2.2.14-12.el6_3 Transaction Summary ================================================================================== Install 4 Package(s)


2) 접속 테스트 아래 링크에 tsql / isql 이용해서 하면된다.

리눅스 unixODBC FreeTDS 설치 (MSSQL) - http://www.opens.kr/36


3) 글로벌 설정

$ vi /etc/freetds.conf
------------------------
[global]
tds version = 8.0
client charset = UTF-8
text size = 64512
timeout = 10
connect timeout = 10
------------------------

※ TDS protocol 버전정보와 자세한 옵션 정보는 아래 freetds 사이트 가이드 참조하면 된다.

http://www.freetds.org/userguide/choosingtdsprotocol.htm

http://www.freetds.org/userguide/


4) PHP PDO에서 접속예시 

$dsn = 'dblib:host=192.168.0.0;dbname=DBNAME';
$user = "user_id";
$password = "user_password";

try {
    $dbh = new PDO($dsn, $user, $password); 
} catch (PDOException $e) {
    echo $e->getMessage();
}
$sQuery = "select * from sysobjects where xtype = 'U'";
$sth =  $dbh->prepare($sQuery);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($result);



Posted by 시니^^