将adodb连接传递到新的php对象

将adodb连接传递到新的php对象,php,mysql,adodb,Php,Mysql,Adodb,我试图通过adodb连接传递到类构造函数,但这样做会出现以下错误: mysql_error(): supplied argument is not a valid MySQL-Link resource 因此,为了将其放到上下文中,我实例化了一个新的adodb连接,如下所示: // establish database connection $db = ADONewConnection($dsn); if (!$db) die(mysql_error()); $user = new User

我试图通过adodb连接传递到类构造函数,但这样做会出现以下错误:

mysql_error(): supplied argument is not a valid MySQL-Link resource
因此,为了将其放到上下文中,我实例化了一个新的adodb连接,如下所示:

// establish database connection
$db = ADONewConnection($dsn);
if (!$db) die(mysql_error());
$user = new UserAccess($db);
// 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!");
}
然后创建我的新用户访问对象,并按如下方式传入adodb连接:

// establish database connection
$db = ADONewConnection($dsn);
if (!$db) die(mysql_error());
$user = new UserAccess($db);
// 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!");
}
这是用户访问类中的构造函数:

function UserAccess($oDbLink) {
   // check we have a valid connection
}
知道我做错了什么吗

谢谢,
Gaz

我看不出您提供的代码中有任何明显错误,因此我建议您:

暂时把物体放在一边 将错误报告设置为E_ALL 仔细检查$dsn中的参数-您可能希望尝试从命令行连接。。。 检查您的访问权限并运行刷新权限 使用$db->debug=TRUE打开ADODb调试; 使用$db->ExecuteSELECT*fromtablename或die$db->ErrorMsg从对象外部测试对象;
当你收到一条消息时,你的连接资源不是一个有效的链接——这通常是正确的。别忘了检查数据库是否确实存在并正在运行。

问题很可能是您试图将PHP的mysql_*函数用于从AdonnewConnection获得的$db对象。它不是一个mysql句柄,因此不能与这些函数一起使用-您需要使用adodb自己的东西。

从您提供的代码来看,代码没有问题。如果你提供更多的东西,那么可能会有帮助


传递ADODB连接的真正原因是什么?它只需要在任何地方传递,需要更多的工作,而没有真正的理由。。。我不愿意那样做。即使是标准的全局类也可能更好。是的,全局类是邪恶的,或者可能是单例类?

您的代码应该如下所示:

// establish database connection
$db = ADONewConnection($dsn);
if (!$db) die(mysql_error());
$user = new UserAccess($db);
// 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!");
}
用户引用,以避免复制对象

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

希望能有所帮助。

谢谢你的回答,我删除了$dsn变量,只传入了$\u全局变量,就成功了。

Djn-谢谢你的建议-我已经事先尝试过了。嗨-Jani Hartikainen,我只是在adodb类失败的情况下使用mysql来获取错误,它不在其他任何地方使用。当我尝试将数据库处理程序传递给用户类时,我可以看到错误。你会建议将adodb的东西放在用户类中吗?你应该在你的问题中添加导致错误的代码行。Jani-如果我不清楚,很抱歉。这是导致错误的实际行:$user=newuseraccess$db;谢天谢地,不可能是这样的,因为那一行与链接无关。如果你说这是由UserAccess的构造函数引起的,你应该在其中包含代码,否则就很难说了。Jani-我已经在上面发布了构造函数代码-这就是我目前拥有的全部。我决定创建一个连接到数据库的全局函数,然后在我的用户类中传递对该函数的引用