2010-01-12 3 views
3

Je fais un blog simple pour moi-même et en lisant le manuel PHP, j'ai trouvé ce http://us2.php.net/manual/en/function.pg-query.phpPourquoi spécifier une connexion de base de données explicite?

Il dit

ressources pg_query ([ressource de connexion $], string $ query)

...

note: Bien que la connexion peut être omis, il est déconseillé, car il peut être la cause de difficile à trouver bogues i n scripts.

Pourquoi ne pas utiliser la dernière connexion? Je ne prévois jamais d'avoir plus d'une connexion ouverte par script PHP, alors comment cela pourrait-il causer des bugs pour moi?

Répondre

13

Hah. "Je n'ai jamais plan sur avoir plus d'une connexion ouverte par script PHP." Je me souviens de la dernière fois que j'ai dit cela. Il était de retour dans trois mois. J'étais alors un jeune fouineur, un peu comme vous. Plein de broche et de vinaigre. Pourquoi faire quelque chose si je ne dois pas? C'était la sagesse dominante dans notre petit démarrage dot-com. "Juste le faire!" nous crions. De plus, nous portions des oignons sur nos ceintures.

Eh bien ... l'heure est venue d'ajouter une petite base de données statistiques rapide au site principal. Rien de spécial, je voulais juste quelques statistiques suivies séparément. J'ai pensé que je réutiliserais le wrapper de base de données. C'était un bon emballage pour son temps! Résumer toutes les fonctions de base de données dont j'avais besoin. Mais dès que je l'ai ajouté, des choses farfelues ont commencé à se produire. Cela n'a pas de sens. J'avais deux objets d'emballage de base de données séparés ... deux connexions distinctes! Comment pourraient-ils s'influencer les uns les autres? Mais alors les utilisateurs seraient déconnectés au hasard. Les sessions échoueraient. Parfois, une mise à jour de clé serait mauvaise. Certaines requêtes ont été exécutées sur les mauvaises bases de données. Les chiens et les chats ont commencé à vivre ensemble! C'était de l'hystérie collective!

Si seulement j'avais spécifié ce connecteur à l'origine. Si seulement je les avais gardés spécifiques, alors pg_query saurait lequel utiliser. Tant de perte de données aurait pu être évitée. Tellement de bonnes tuples ... tellement de bonnes données. Perdu. Perdu ...

* sniff *

+0

Il était trivial (<100 lignes de code php encore) de changer tout mes trucs pour utiliser des requêtes explicites .. donc je pense que je devais anticiper FTW – Earlz

+0

Certainement une bonne idée :) Si jamais vous ajoutez une autre connexion à une base de données et commencez à les alterner , vous devez vraiment avoir le paramètre de connexion spécifié. Sinon, c'est comme monter la colline dans les deux sens. Dans la neige! – zombat

+0

Merci pour le divertissement zombat. – jay

1

Ceci est destiné à ceux qui ont besoin d'appels explicites vers diverses bases de données. Si vous ne le faites pas, ignorez-le :) Certains scripts fonctionnent sur des bases de données locales et distantes, alors que d'autres fonctionnent sur plusieurs bases de données distantes locales ou multiples.

+0

Ou vous pouvez simplement créer une classe de base de données pour vous des trucs demandé, enregistrez la connexion à une variable, et passé en. Prend comme 1 minute pour écrire et vous n'avez jamais pour y penser à nouveau :) –

+0

Il se peut que ce soit moi, mais je pense qu'être plus explicite est supposé aider le débogage, car il ne nécessite pas que je connaisse la fonctionnalité 'magic helper'. –

+0

@ChaCha, oui je serais d'accord généralement ici, mais pour les petites applications un paramètre supplémentaire pour passer autour semble un peu verbeux .. – Earlz

0

Peut-être est-ce dû à l'ordre des arguments? S'il s'agissait d'une recommandation d'utiliser explicitement une ressource de connexion, la même note serait sur mysql_query(). À moins qu'il y ait quelque chose de spécifique à PostgreSQL, je ne suis pas au courant.

En résumé, je ne vois aucun problème à omettre l'argument de connexion pour les applications à connexion unique.

Questions connexes