Я пытаюсь передать соединение adodb с конструктором класса, но при этом получаю эту ошибку:
mysql_error(): supplied argument is not a valid MySQL-Link resource
Итак, чтобы включить его в контекст, я создал новое соединение adodb следующим образом:
// establish database connection
$db = ADONewConnection($dsn);
if (!$db) die(mysql_error());
Затем создал мой новый пользовательский объект доступа и передал его в adodb-соединении следующим образом:
$user = new UserAccess($db);
Это конструктор из класса доступа пользователя:
function UserAccess($oDbLink) {
// check we have a valid connection
}
Любые идеи, что я делаю неправильно?
Спасибо, Gaz
Спасибо за ваши ответы, мне удалось получить эту работу, удалив переменную $dsn и просто переходя в переменные $_GLOBAL
Ваш код должен выглядеть примерно так:
// 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
}
Надеюсь, что это поможет.
Ничего плохого в коде, из того, что вы поставили. Если вы поставите что-то более полное, то сможете помочь.
Есть ли настоящая причина для прохождения соединения ADODB? Это просто нужно пройти везде и больше работать и без реальной причины... Я бы не стал этого делать. Даже стандартный глобальный может быть лучше (да, глобальные злы злы) или, возможно, класс Singleton?
Вероятнее всего, проблема заключается в том, что вы пытаетесь использовать функции PHP mysql_ * с объектом $db
, который вы получаете от ADONewConnection
. Это не дескриптор mysql, поэтому он не будет работать с этими функциями - вам нужно использовать собственные материалы adodb.
Я не вижу никакой очевидной ошибки в части кода, которую вы предоставили, поэтому я предлагаю вам:
error_reporting()
в E_ALL
$dsn
- вы можете попытаться подключиться из командной строки...$db->debug = TRUE;
$db->Execute("SELECT * FROM tablename") or die($db->ErrorMsg());
Когда вы получаете сообщение, ваш ресурс соединения не является допустимой ссылкой - ну, как правило, это правда. Не забудьте проверить, что база данных на самом деле существует и работает.