我在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。
答案 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