Это ошибка в базе данных Advantage? - PullRequest
1 голос
/ 05 мая 2009

Я сталкиваюсь с тем, что мне кажется ошибкой в ​​расширении PHP базы данных 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_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: максимальное преимущество Соединения с сервером базы данных превышены.

Я пробовал несколько других вещей, включая это, но безуспешно:

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 );
}

Это, однако, DOES устраняет проблему, и ОБА запросы по-прежнему выполняются успешно и точно !!

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

1 Ответ

4 голосов
/ 05 мая 2009

В базе знаний есть этот пункт об ошибке 6303 и о том, как увеличить число возможных соединений с клиентом, http://devzone.advantagedatabase.com/dz/content.aspx?Key=17&RefNo=981124-0621. В настоящее время НИОКР изучают эту проблему и работают над ее разрешением в следующем выпуске службы .

...