这方面的资料在网络上不太好找,按照上一篇的内容,整理了一下,做了一个可以运行的php + sql server实例好让大家方便,
<html>
<body>
<h1 align="center">这一课,练习数据库的编程</h1>
<?php
$serverName = "localhost";
//$serverName = "192.168.0.254";
$pwd = "sa";
$uid = "sa";
$connectionInfo = array( "UID"=>$uid,"PWD"=>$pwd,"Database"=>"gprs");
$conn = sqlsrv_connect($serverName,$connectionInfo);
if( $conn == false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}else{
echo "恭喜你,数据库连接成功<br>";
}
$tSql="select top 5 * from device_info_tbl";
if(!($stmt=sqlsrv_query($conn,$tSql))){
echo "error in statement!<br>";
}
$a=array("a"=>"aaaa","b"=>"bbbb","c"=>"cccc");
echo "元素个数:". count($a)."<br>";
while( sqlsrv_fetch( $stmt))
{
// 以 sqlsrv_get_field 函式取得特定欄位的資料
echo "ProdID: ".sqlsrv_get_field($stmt, 0)."<br>";
echo "UnitPrice: ".sqlsrv_get_field($stmt, 1)." <br>";
echo "StockedQty: ".sqlsrv_get_field($stmt, 2)." <br>";
echo "-----------------<br>";
}
foreach($a as $key =>$value){
echo $key ."=>".$value." ";
}
echo "<br>";
$aRoster=array();
$index=0;
while($restult=sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC)){
$temp=array(
id=>$restult["ID"],
address=>$restult["ADDRESS"]
);
array_push($aRoster,$temp);
}
/*
// 已建立 PHP 連接資源,也已執行查詢 ($stmt)
// $obj 的內容是PHP物件形式的資料列
while( $obj = sqlsrv_fetch_object( $stmt))
{
// 一一顯示物件裡的 LastName 及 FirstName
echo $obj->LastName.", ".$obj->FirstName."</br>";
}
// 以迴圈顯示陣列裡的查詢結果
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC))
{
echo "ProdID: ".$row[0]."</br>";
echo "UnitPrice: ".$row[1]."</br>";
echo "StockedQty: ".$row[2]."</br>";
echo "-----------------</br>";
}*/
sqlsrv_free_stmt( $stmt);
echo count($aRoster)."<br>";
echo $aRoster[4]["address"]."<br>";
//以上为数据库查询功能
if( $client_info = sqlsrv_client_info( $conn))
{
// 以foreach 迴圈顯示 $client_info 陣列內容
foreach( $client_info as $key => $value)
{
echo $key.":".$value."</br>";
}
}
// 若叫用結果為 false,表示叫用失敗
else
{
echo "sqlsrv_client_info函式執行有誤</br>";
}
if( $server_info = sqlsrv_server_info( $conn))
{
// 以foreach 迴圈顯示 $server_info 陣列內容
foreach( $server_info as $key => $value)
{
echo $key.":".$value."</br>";
}
}
// 若叫用結果為 false,表示叫用失敗
else
{
echo "sqlsrv_server_info 函式執行有誤 </br>";
}
//sqlserv_close($conn);
/*
$tsql = "--Query 1
SELECT ProductID, ReviewerName, Rating
FROM Production.ProductReview
WHERE ProductID=?;
// 省略連接 SQL Server 的程式碼
// 定義批次查詢
--Query 2
INSERT INTO Production.ProductReview (ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating)
VALUES (?, ?, ?, ?, ?);
--Query 3
SELECT ProductID, ReviewerName, Rating
FROM Production.ProductReview
WHERE ProductID=?;";
// 指定參數值並執行查詢
$params = array(798,
798,
'CustomerName',
'2008-4-15',
'test@supidea.com,
3,
798 );
$stmt = sqlsrv_query($conn, $tsql, $params);
// 取得並顯示第 1 次查詢的結果
echo "查詢 1 的結果:<\br>";
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ))
{
print_r($row);
}
// 以sqlsrv_next_result 函式將批次查詢的結果移往下一筆
sqlsrv_next_result($stmt);
// 取得並顯示第 2 次查詢的結果
echo "查詢 2 的結果:<\br>";
echo "資料已更新:".sqlsrv_rows_affected($stmt)."</br>";
// 以 sqlsrv_next_result 函式將批次查詢的結果移往下一筆
sqlsrv_next_result($stmt);
// 取得並顯示第 3 次查詢的結果
echo "查詢 3 的結果:<\br>";
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ))
{
print_r($row);
}
//更新数据,参数数组
$tsql1 = "UPDATE Production
SET Quantity = ?
WHERE ProductID = ?";
// 初始或更新對應到 T-SQL 查詢替代符號的 PHP 變數
// 本例欲將編號為 709 的產品數量更新成 10
$qty = 10;
$productId = 709;
// 以 sqlsrv_query 函式來執行查詢
$stmt1 = sqlsrv_query( $conn, $tsql1, array($qty, $productId));
//批量更新数据
$tsql = "INSERT INTO Sales (SalesOrderID,
OrderQty,
ProductID,
SpecialOfferID,
UnitPrice)
VALUES (?, ?, ?, ?, ?)";
// 初始或更新對應到 T-SQL 查詢替代符號的PHP變數
// 以下的每個子陣列會是查詢的參數陣列
// 每個子陣列裡的順序是
// SalesOrderID、OrderQty、ProductID、SpecialOfferID、UnitPrice
$parameters = array( array(43659, 8, 711, 1, 20.19),
array(43660, 6, 762, 1, 419.46),
array(43661, 4, 741, 1, 818.70));
// 初始參數值
$orderId = 0;
$qty = 0;
$prodId = 0;
$specialOfferId = 0;
$price = 0.0;
// 準備
$stmt = sqlsrv_prepare( $conn, $tsql, array( $orderId,
$qty,
$prodId,
$specialOfferId,
$price));
// sqlsrv_ prepare 函式執行失敗會傳回false
if( $stmt === false )
{
// 向使用者顯示執行失敗的訊息,下一行程式可顯示系統的錯誤訊息
die( print_r( sqlsrv_errors(), true));
}
// 執行 $parameters 裡每組參數的陳述式
foreach( $parameters as $params)
{
list($orderId, $qty, $prodId, $specialOfferId, $price) = $params;
if( sqlsrv_execute($stmt) === false )
{
// 向使用者顯示執行失敗的訊息,下一行程式可顯示系統的錯誤訊息
die( print_r( sqlsrv_errors(), true));
}
else
{
// 顯示新的資料列,以確認資料列已成功插入
echo "資料列已改變: ".sqlsrv_rows_affected( $stmt )."<\br>";
}
}
// 釋放查詢的 PHP 資源
sqlsrv_free_stmt( $stmt);
//按照数据类型插入数据
// 定義查詢
$tsql1 = "INSERT INTO HumanResources.EmployeePayHistory (EmployeeID,
RateChangeDate,
Rate,
PayFrequency)
VALUES (?, ?, ?, ?)";
// 建構參數陣列
$employeeId = 5;
$changeDate = "2005-06-07";
$rate = 30;
$payFrequency = 2;
$params1 = array(
// EmployeeID 沒有指定 SQL Server 資料型別,會使用預設型別
array($employeeId, null),
// datetime:SQLSRV_SQLTYPE_DATETIME
array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),
// money:SQLSRV_SQLTYPE_MONEY
array($rate, null, null, SQLSRV_SQLTYPE_MONEY),
// tinyint:SQLSRV_SQLTYPE_TINYINT
array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT));
// 執行插入查詢
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);
//*/
?>
<?php
$file = fopen("http://www.supidea.com","r");
fpassthru($file);
/*
// 定義查詢 固定插入数据类型
$tsql1 = "INSERT INTO HumanResources.EmployeePayHistory (EmployeeID,
RateChangeDate,
Rate,
PayFrequency)
VALUES (?, ?, ?, ?)";
// 建構參數陣列
$employeeId = 5;
$changeDate = "2005-06-07";
$rate = 30;
$payFrequency = 2;
$params1 = array(
// EmployeeID 沒有指定 SQL Server 資料型別,會使用預設型別
array($employeeId, null),
// datetime:SQLSRV_SQLTYPE_DATETIME
array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),
// money:SQLSRV_SQLTYPE_MONEY
array($rate, null, null, SQLSRV_SQLTYPE_MONEY),
// tinyint:SQLSRV_SQLTYPE_TINYINT
array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT));
// 執行插入查詢
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);
// 定義 T-SQL 查詢 按照php数据类型输出数据
$tsql = "SELECT ReviewerName,
ReviewDate,
Rating,
Comments
FROM Production.ProductReview
WHERE ProductID = ?
ORDER BY ReviewDate DESC";
// 設定參數值
$productID = 709;
$params = array( $productID);
// 執行查詢
$stmt = sqlsrv_query($conn, $tsql, $params);
// 取回並顯示資料;取回資料的同時,亦指定成 PHP 資料型別
while ( sqlsrv_fetch( $stmt))
{
// 不指定;使用預設型別
echo "Name: ".sqlsrv_get_field( $stmt, 0 )."</br>";
// 指定成 8 位元字元編碼的字串
echo "Date: ".sqlsrv_get_field( $stmt, 1, SQLSRV_PHPTYPE_STRING( SQLSRV_ENC_CHAR))."</br>";
// 不指定;使用預設型別
echo "Rating: ".sqlsrv_get_field( $stmt, 2 )."</br>";
echo "Comments: ";
// 指定成 8 位元字元編碼的資料流
$comments = sqlsrv_get_field( $stmt, 3, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR));
fpassthru( $comments);
echo "</br>";
}
//*/
?>
<?php
function gb2utf($string) {
$out = iconv( "gb2312", "UTF-8" , $string);
return $out;
}
//example:
$oldword = "中国人abc123";
$newwords = gb2utf($oldword);
echo $newwords;
/*
//sqlsrv_errors的应用
$errors = sqlsrv_errors();
foreach( $errors as $error)
{
echo "SQLSTATE: ".$error[ 'SQLSTATE']."</br>";
echo "code: ".$error[ 'code']."</br>";
echo "message: ".$error[ 'message']."</br>";
}
不過,處理之前,最好先檢查是不是真的有錯誤或警告:
if( ($errors = sqlsrv_errors() ) != null)
{
// 有錯誤或警告
}
//*/
?>
</body>
</html>