アドバンテージ データベース PHP 拡張機能のバグと思われるものに遭遇しました (わかっています、わかっています...)。バグとして報告しましたが、まだ何も返ってこないので、皆さんに任せようと思いました。
作業コード:
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 );
}
2 番目のクエリの実行に注目してください。このループは 51 番目のサイクルで失敗し (db サーバーは各アプリケーションを 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を使用しています