[英]How to call a SQL Server stored procedure using pdo connection in php?
我在 SQL Server 數據庫中有兩個存儲過程getAllUser
和getAllEvent()
。 我可以使用以下代碼成功連接到數據庫:
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.