簡體   English   中英

使用PHP中的odbc_fetch_array從SQL Azure數據庫響應緩慢

[英]Slow response from SQL Azure database using odbc_fetch_array in PHP

我在Azure中有一個數據庫。 當我運行通過SMSS返回300條記錄的查詢時,我很快就會得到結果。 但是,當我嘗試使用php中的odbc_fetch_array獲得結果時,響應時間很慢(15-20秒)。 如果我將結果集限制為幾個記錄(在php中),則響應很快。 如何減少延遲?

這是我的代碼:

    //CONNECTIONS  *************************************************
try {
    $connect = odbc_connect(odbcname,'user','password');
    $result = odbc_exec($connect,$sql); 
    $applicants = array();
//slow response in while loop below
    while( $row = odbc_fetch_array($result) ) {
        array_push($applicants,$row);
    }
    $err = (odbc_error() ? odbc_errormsg($connect) : '');
    odbc_close($connect);
} catch (Exception $e) {
    die();
}

Web服務器是Windows Server 2008 R2數據中心。 odbc驅動程序是“ SQL Server ODBC驅動程序11”。

您可以嘗試設置連接以使用ODBC_CURSOR

//CONNECTIONS  *************************************************
try {
    $connect = odbc_connect(odbcname,'user','password', SQL_CUR_USE_ODBC); //<--------
    $result = odbc_exec($connect,$sql); 
    $applicants = array();
//slow response in while loop below
    while( $row = odbc_fetch_array($result) ) {
        array_push($applicants,$row);
    }
    $err = (odbc_error() ? odbc_errormsg($connect) : '');
    odbc_close($connect);
} catch (Exception $e) {
    die();
}

然而,微軟推薦的方法從PHP訪問SQL數據庫是使用PHP的微軟驅動程序提供的SQL Server 在這里

這里有一些由Microsoft示例(未經測試的示例)連接到Azure SQL Server。

$server = "tcp:<value of SERVER from section above>";
$user = "<value of USERNAME from section above>"@SERVER_ID;
$pwd = "password";
$db = "testdb";

$conn = sqlsrv_connect($server, array("UID"=>$user, "PWD"=>$pwd, "Database"=>$db));

if($conn === false){
    die(print_r(sqlsrv_errors()));
}

$tsql = "SELECT * FROM PRODUCTS WHERE ID > ?";

$cursorType = array("Scrollable" => SQLSRV_CURSOR_KEYSET);

$params = array(1)

$getProducts = sqlsrv_query($conn, $tsql, $params, $cursorType);
if ( $getProducts === false)
   die( FormatErrors( sqlsrv_errors() ) );


if(sqlsrv_has_rows($getProducts))
{

    while( $row = sqlsrv_fetch_array( $getProducts, SQLSRV_FETCH_ASSOC))
    {
           //ADD CODE HERE
    }

}

/* Free the statement and connection resources. */
sqlsrv_free_stmt( $getProducts );
sqlsrv_close( $conn );

Azure上的網站,你可以找到關於如何使用PHP連接到SQL Server一步一步的教程, 看這里

在這里,您可以找到有關用於SQL Server 鏈接的 PHP Microsoft驅動程序的文檔。

暫無
暫無

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

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