Передайте соединение adodb новому объекту php

0

Я пытаюсь передать соединение 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

Теги:
adodb

5 ответов

0

Спасибо за ваши ответы, мне удалось получить эту работу, удалив переменную $dsn и просто переходя в переменные $_GLOBAL

0

Ваш код должен выглядеть примерно так:

// 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
}

Надеюсь, что это поможет.

0

Ничего плохого в коде, из того, что вы поставили. Если вы поставите что-то более полное, то сможете помочь.

Есть ли настоящая причина для прохождения соединения ADODB? Это просто нужно пройти везде и больше работать и без реальной причины... Я бы не стал этого делать. Даже стандартный глобальный может быть лучше (да, глобальные злы злы) или, возможно, класс Singleton?

0

Вероятнее всего, проблема заключается в том, что вы пытаетесь использовать функции PHP mysql_ * с объектом $db, который вы получаете от ADONewConnection. Это не дескриптор mysql, поэтому он не будет работать с этими функциями - вам нужно использовать собственные материалы adodb.

  • 0
    Привет, Яни Хартикайнен, я использую mysql_ * только для захвата ошибки, если класс adodb не работает, он больше нигде не используется. Я могу ошибку, когда я пытаюсь передать обработчик базы данных в пользовательский класс. Вы бы предложили перенести материал adodb в класс пользователя?
  • 0
    Вы должны добавить строку кода, которая вызывает ошибку в вашем вопросе.
Показать ещё 3 комментария
0

Я не вижу никакой очевидной ошибки в части кода, которую вы предоставили, поэтому я предлагаю вам:

  • оставить в стороне объект на время
  • установите error_reporting() в E_ALL
  • дважды проверьте параметры в $dsn - вы можете попытаться подключиться из командной строки...
  • проверьте права доступа и запустите FLUSH PRIVILEGES
  • включить отладку ADODb с помощью $db->debug = TRUE;
  • проверить объект снаружи объекта с помощью $db->Execute("SELECT * FROM tablename") or die($db->ErrorMsg());

Когда вы получаете сообщение, ваш ресурс соединения не является допустимой ссылкой - ну, как правило, это правда. Не забудьте проверить, что база данных на самом деле существует и работает.

  • 0
    Djn - спасибо за ваши предложения - я пробовал их заранее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню