使用PHP中的odbc_fetch_array从SQL Azure数据库缓慢响应

时间:2014-10-20 23:11:18

标签: php sql-server azure

我在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 Datacenter。 odbc驱动程序是用于SQL Server&#34;的<#34; ODBC驱动程序11。

1 个答案:

答案 0 :(得分:0)

您可以尝试设置连接以使用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数据库的方法是使用适用于SQL Server的Microsoft驱动程序,here

这里有一些(未经测试的示例)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的分步教程,see here

在这里,您可以找到有关适用于Sql Server的Microsoft驱动程序的文档Link