Je suis en train de tomber sur ce qui me semble être un bug dans l'extension PHP Advantage Database (je sais, je sais ...). Je l'ai signalé comme un bug, mais je n'ai toujours rien entendu en retour, alors j'ai pensé que je le ferais par les gars.Est-ce un bug avec la base de données Advantage?
Code du travail:
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);
}
Ce juste une boucle à travers 100 fois, se connecte à la DB, exécute une requête, et se déconnecte.
NON Code de travail:
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);
}
Notez la deuxième exécution de la requête? Cette boucle échoue sur le cycle 51e (le serveur db limite chaque application 50 connexions simultanées) avec l'erreur
Erreur 6303: Advantage maximum connexions de base de données de serveur dépassées.
J'ai essayé plusieurs autres choses dont cela sans succès:
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);
}
Ceci, cependant, EST- résoudre le problème, et les deux requêtes toujours avec succès et exécuter avec précision !!
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);
}
Tout cela me semble très étrange ... des idées?
EDIT: Je suis sur PHP 5.2.5 et ADS 8.1
Ceci montre ce que signifie l'erreur et comment autoriser plus de connexions. Cependant, cela n'explique pas pourquoi vous obtenez une erreur de connexion maximale lorsque toutes les connexions sont fermées avant de vous reconnecter. – KOGI
Ce serait la partie que R & D étudie. Il semble être un problème avec le comptage de référence lorsque plusieurs instructions s'ouvrent sur une connexion. – LanceSc
R & D a confirmé qu'il s'agit d'un bug avec le comptage de référence des connexions avec plusieurs déclarations ouvertes. Il sera corrigé dans la prochaine version du service. – LanceSc