Sea*_*256 2 php sql-server odbc
总之,在PHP中使用带有SQL Server 2012的odbc_fetch_row()时,需要17秒才能循环525个结果.
环境:
odbc.ini文件内容:
[ODBC Data Sources]
theDb = Actual SQL Server
[theDb]
Driver = /Library/ODBC/Actual SQL Server.bundle/Contents/MacOS/atsqlsrv.so
Description = Production SQL Server
Server = [some address]
Database = [some db]
ServerName = theDb
host = [some address]
Run Code Online (Sandbox Code Playgroud)
PHP测试页面:
<?php
$userID="[user]";
$password="[password]";
$driverSourceString="theDb";
$dbc = odbc_connect($driverSourceString, $userID, $password);
$time_start=0;
function startTimer(){
global $time_start;
$time_start = microtime(true);
}
function printTimer(){
global $time_start;
$time_end = microtime(true);
$time = $time_end - $time_start;
echo sprintf('%f', $time);
echo " Seconds";
}
?>
<html>
<head>
<title>SQL TEST</title>
</head>
<body>
<pre>
Connection:
<?php
startTimer();
$dbc = odbc_connect($driverSourceString, $userID, $password);
printTimer();
?>
Query:
<?php
startTimer();
$query = "SELECT m.firstName + ' ' + m.lastName AS username FROM models m ORDER BY lastName ASC";
$result = odbc_exec($dbc, $query);
printTimer();
?>
Fetchrow:
<?php
startTimer();
while(odbc_fetch_row($result))
{
//do nothing
}
printTimer();
?>
</pre>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出:
Connection:
0.000129 Seconds
Query:
0.061282 Seconds
Fetchrow:
15.795249 Seconds (WHY SO LONG??)
Run Code Online (Sandbox Code Playgroud)
小智 11
我还使用php odbc从MSSQL数据库中获取结果时遇到了一些严重的性能问题.对我来说,解决方案是在连接中指定游标类型:
$con = odbc_connect([dsn], [user], [pwd], SQL_CUR_USE_ODBC)
Run Code Online (Sandbox Code Playgroud)