我遇到了在我看来是 Advantage Database PHP Extension 中的一个错误(我知道,我知道......)。我已经将它报告为一个错误,但仍然没有收到任何回复,所以我想我会由你们来运行它。
工作代码:
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
}
这只是循环 100 次,连接到数据库,执行查询,然后断开连接。
非工作代码:
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
}
注意到第二个查询执行了吗?此循环在第 51 个周期失败(数据库服务器将每个应用程序限制为 50 个同时连接)并出现错误
错误 6303:超出最大 Advantage 数据库服务器连接数。
我尝试了其他几件事,包括没有成功:
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_free_result( $results );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_free_result( $results );
ads_close( $connection );
}
但是,这确实解决了问题,并且两个查询仍然成功且准确地执行!
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
}
这一切对我来说似乎很奇怪......有什么想法吗?
编辑:我在 PHP 5.2.5 和 ADS 8.1