2010-05-28 7 views
0

Il y a plus d'un an, j'ai créé mes propres classes de base de données qui utilisent PDO et gèrent toutes les connexions de préparation, d'exécution et de fermeture. Ces cours ont fonctionné très bien jusqu'à présent.Connexions de base de données PDO Problème

Il y a deux serveurs de bases de données différents, MySQL et MS SQL Express. Je récupère un identifiant d'employé du serveur MySQL et je l'utilise pour obtenir les informations des employés du serveur MS SQL. Il y a environ 11k enregistrements provenant du serveur MySQL et mon programme ne fait que passer à 1200 avant de planter avec une erreur comme celle-ci.

Connection failed (odbc:Driver=FreeTDS;Servername=MSSQLExpress;Database=SMDINC) Class (PDOException) 
SQLSTATE[08001] SQLDriverConnect: 0 [unixODBC][FreeTDS][SQL Server]Unable to connect to data source 

Il semble que le programme ne peut se connecter à la source de données, mais il est en cours d'exécution de la même requête exacte à environ 30 fois avant cela et avoir aucun problème. En outre, j'ai soigneusement vérifié toutes les données entrant dans la requête et tout semble bien. Je pense que le problème est peut-être que de nombreuses connexions sont créées, mais j'ai essayé de fermer toutes les connexions à différents endroits, et rien ne semble résoudre le problème. Toute aide au débogage, ou suggestion serait appréciée!

Craig Metrolis

MISE À JOUR

Ok, j'ai trouvé le problème, j'utilisais closeCursor après la préparation de la requête, et avant l'exécuter. J'ai sorti le closeCursor et il semble avoir résolu ce problème .... MAIS POURQUOI ?? Cela ne fait pas de sens pour moi .....

Répondre

0

PDOStatement :: closeCursor() permet de libérer la connexion au serveur afin que autres instructions SQL peuvent être émises, mais laisse la déclaration dans un état qui lui permet d'être exécuté à nouveau.

En d'autres termes, il fermait votre connexion sur vous. Cependant, cela n'explique toujours pas pourquoi il a reçu 1200 enregistrements avant que le problème ne se produise.

+0

Merci pour la réponse R. Oui, il est très étrange aussi que j'utilise ces requêtes presque exactement comme celles-ci dans tous mes autres programmes sans problèmes. J'ai aussi pensé que si je créais de nouveaux objets chaque fois que le closeCursor devrait seulement fermer le sth dans l'objet courant. Pensez-vous que je devrais juste laisser tomber? Ou est-ce mieux si je trouve un moyen de travailler dans? – Metropolis

+0

@Metropolis: Désolé de ne pas répondre plus tôt. Le curseur doit être automatiquement fermé lorsque la mémoire PDOS est en dehors de la mémoire, donc vous devriez être OK pour le laisser éteint. – Powerlord

+0

Cool merci pour la réponse R :) – Metropolis

Questions connexes