2010-08-13 7 views

Répondre

0

Ensuite, la valeur de $link_identifier semble être 10 et ne devrait pas être :-)

+2

Il peut être 10. N'oubliez pas que les ressources ne sont rien de plus qu'un type de numéro spécial. Si vous faites '$ identifier = mysql_connect()', puis 'echo $ identifier;', vous obtiendrez un nombre. Quoi de plus probable, c'est que la ressource a été fermée avant l'exécution de la requête ... – ircmaxell

2

$link_identifier doit être une valeur que vous avez obtenue de mysql_connect. Vous n'avez pas vraiment besoin de l'inclure si vous n'utilisez qu'une base de données; Chaque fonction mysql_ utilise la dernière base de données par défaut que vous avez configurée mysql_connect.

Si vous n'essayez pas de transmettre un identifiant de lien, il y a de fortes chances que vous essayiez d'utiliser mysql_query d'une manière non prévue. Je vais devoir voir le code qui l'appelle pour en dire plus.

0

10 est un peu élevé pour un identifiant de lien MySQL, sauf si vous avez 10 connexions ouvertes à MySQL dans votre script, ou fermez/reconnectez pour chaque requête. Essayez-vous de transmettre un résultat de requête précédent au lieu du handle de la base de données? Quelque chose comme ceci:

$dbh = mysql_connect(...); 
$stmt = mysql_query('SELECT ...', $dbh); 

et plus tard après une série de requêtes, peut-être faire

$stmt = mysql_query('SELECT ...', $stmt); // <--using $stmt instead of $dbh 

De plus, bien que peu probable, le mélange poignées mysqli et MySQL ne sont pas pris en charge. Ils font tous les deux la même chose et utilisent les mêmes bibliothèques en interne, mais maintiennent des pools de connexions séparés qui ne peuvent pas être partagés.

1

Je suis tombé sur cette question avec une recherche désespérée sur Google. Quelque chose cHao et Lars m'a inspiré et j'ai trouvé mon problème.

J'ai une classe de base de données, en plus de nombreuses autres classes standard (il me semble réécrire plus souvent que réutiliser) que je passe l'objet de base de données résultant. Je les avais instanciées dans le mauvais ordre (ne pas initialiser la base de données d'abord), et la plupart des appels contre l'objet Database réussiraient à cause d'un vérificateur de lien de base de données de secours.

Avec une instance spécifique, cependant, cette solution de repli était ignorée (je n'ai pas encore déterminé pourquoi) et mon erreur d'ordre d'instanciation a été exposée.

Morale de mon récit: Si vous utilisez des classes dans votre application, vérifiez l'ordre de tri/création et dépendances des objets, en vous assurant que les classes dépendantes sont chargées en premier.

Questions connexes