簡體   English   中英

如何在php中使用pdo連接調用SQL Server存儲過程?

[英]How to call a SQL Server stored procedure using pdo connection in php?

我在 SQL Server 數據庫中有兩個存儲過程getAllUsergetAllEvent() 我可以使用以下代碼成功連接到數據庫:

try {
    $hostname = "xxxxxx";
    $port = xxxx;
    $dbname = "xxxxx";
    $username = "xxxxx";
    $pw = "xxxxxx";
    $dbh = new PDO ("sqlite:server=$hostname;Database=$dbname","$username","$pw");
    echo "connected";
  } catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
  }

現在我將如何調用這些存儲過程....

  • getAllUser不需要任何參數
  • getAllEvent需要三個參數@FromDate@ToDate@UserID

這該怎么做? 請幫忙

您需要使用PDO::query()PDO::prepare()PDOStatement::execute()准備和執行 PDO 語句。

使用PDOStatement::bindParam()綁定參數。

使用CALL語法調用過程。

如果您的存儲過程返回結果集,請使用PDOStatement::fetch()PDOStatement::fetchAll()獲取數據:

接下來是使用 PHP 7.1.12、PHP Driver for SQL Server 4.3.0+9904、SQL Server 2012 Express Edition 的工作示例。 {CALL sp_name}EXEC sp_name工作。

T-SQL:

CREATE PROCEDURE [dbo].[getAllUser]
AS BEGIN
    SELECT 'Result from stored procedure.' AS [ResultText]
END

CREATE PROCEDURE [dbo].[getAllEvent]
     @FromDate date, 
     @ToDate date,
     @UserID int
AS 
BEGIN
    SELECT 
        @FromDate AS FromDate,
        @ToDate AS ToDate,
        @UserID AS UserID
END

PHP:

<?php
# Connection info
$hostname = 'server\instance,port';
$dbname   = 'database';
$username = 'username';
$pw       = 'password';

# Connection
try {
    $dbh = new PDO("sqlsrv:server=$hostname;Database=$dbname", $username, $pw);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch( PDOException $e ) {
    die( "Error connecting to SQL Server. ".$e->getMessage());
}

# First procedure
try {
    echo "Procedure: getAllUser"."<br>";
    $sql = "{CALL getAllUser}";
    #$sql = "EXEC getAllUser";
    $stmt = $dbh->query($sql);
    # If your stored procedure returns information about records affected, fetch next result set
    $stmt->nextRowset();  
    while ($row = $stmt->fetch( PDO::FETCH_ASSOC )) {
       foreach($row as $name => $value) {
          echo $name.": ".$value."<br>";
       }    
    }
    echo "<br>";
} catch( PDOException $e ) {
    die( "Error executing stored procedure: ".$e->getMessage());
}
$stmt = null;

# Second procedure
try {
    echo "Procedure: getAllEvent"."<br>";
    $sql = "{CALL getAllEvent(?, ?, ?)}";
    #$sql = "exec getAllEvent ?, ?, ?";
    $fromDate = '2008-08-03'; 
    $toDate = '2008-08-05';
    $userID = 123;
    $stmt = $dbh->prepare($sql);
    $stmt->bindParam(1, $fromDate);
    $stmt->bindParam(2, $toDate);
    $stmt->bindParam(3, $userID);
    $stmt->execute();
    while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){
        foreach($row as $name => $value) {
            echo $name.": ".$value."<br>";
        }   
    }
    echo "<br>";
} catch( PDOException $e ) {
    die( "Error connecting to SQL Server" );
}
$stmt = null;

# End
$dbh = null;
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM