2009-12-13 6 views
0

Je suis en train de passer par une connexion adodb à un constructeur de classe, mais ce faisant, obtenir cette erreur:pass adodb à nouvel objet php

mysql_error(): supplied argument is not a valid MySQL-Link resource 

Donc, pour le mettre en contexte, j'ai instancié nouvelle connexion adodb comme ceci:

// establish database connection 
$db = ADONewConnection($dsn); 
if (!$db) die(mysql_error()); 

a ensuite créé mon nouvel objet d'accès utilisateur et transmis à la connexion adodb comme ceci:

$user = new UserAccess($db); 

C'est le constructeur de la classe d'accès utilisateur:

function UserAccess($oDbLink) { 
    // check we have a valid connection 
} 

Toutes les idées que je fais mal?

Merci, Gaz

Répondre

0

Je ne vois aucune erreur manifeste dans la partie du code fourni, donc je vous suggère:

  • laisser de côté l'objet pour le moment
  • définir votre error_reporting()-E_ALL
  • double vérifier les paramètres $dsn - vous pouvez essayer de se connecter à partir de la ligne de commande ...
  • vérifier vos privilèges d'accès et exécuter FLUSH PRIVILEGES
  • tour le débogage Adodb avec $db->debug = TRUE;
  • test de la chose à l'extérieur de l'objet avec un $db->Execute("SELECT * FROM tablename") or die($db->ErrorMsg());

Lorsque vous recevez un message de votre ressource de connexion n'est pas valide lien - eh bien, c'est généralement vrai. Ne pas oublier de vérifier la base de données est réellement là et en cours d'exécution.

+0

djn - merci pour vos suggestions - je les avais essayé au préalable. – Gaz

0

Le problème est très probablement que vous essayez d'utiliser les fonctions mysql_ * de PHP avec l'objet $db que vous obtenez de ADONewConnection. Ce n'est pas un handle mysql, donc ça ne fonctionnera pas avec ces fonctions - vous devez utiliser les propres trucs d'adodb.

+0

Salut - Jani Hartikainen, Je n'utilise que mysql_ * pour récupérer l'erreur si la classe adodb échoue, elle n'est utilisée nulle part ailleurs. Je peux l'erreur lorsque j'essaie de transmettre le gestionnaire de base de données à la classe d'utilisateurs. Suggérez-vous d'apporter le contenu adodb dans la classe d'utilisateurs? – Gaz

+0

Vous devez ajouter la ligne de code à l'origine de l'erreur dans votre question. –

+0

Jani - désolé si je n'étais pas clair. C'est la ligne réelle qui provoque l'erreur: $ user = new UserAccess ($ db); Merci encore – Gaz

0

Rien à redire avec votre code, d'après ce que vous avez fourni. Si vous fournissez quelque chose de plus complet, vous pourrez peut-être aider.

Y a-t-il un réel raison de passer une connexion ADODB autour? Ça va juste devoir être passé partout et plus de travail et sans une vraie raison ... J'hésiterais à faire ça. Même un standard global peut être meilleur (oui les globals sont mauvais) ou peut-être un cours de Singleton?

0

Votre code devrait ressembler à ceci:

// establish database connection 
$db = ADONewConnection($dsn); 
if (! $db) 
{ 
    // just display error message 
    // you cannot use mysql_error, since you haven't connected to any database 
    die ("Cannot connect, check the parameter and make sure db is running!"); 
} 

Référence de l'utilisateur, afin d'éviter la copie objet

function UserAccess(&$oDbLink) { 
// check we have a valid connection 
} 

Je espère que ça aide.

0

Merci pour vos réponses, j'ai réussi à obtenir ce travail en supprimant la variable $ dsn et juste en passant variables $ _global