Здравствуйте.
Прошу помочь уважаемое сообщество. Дело в следующем.
Не удается использовать DataObject для работы с базой данных.
Поступаю так:
1) при помощи createTables.php создал классы для всех таблиц базы, создал ini-файл.
2) Использую пример из руководства к пакету DataObject, который описывает работу этого объекта (
http://pear.php.net/manual/en/package.database.db-dataobject.intro-purpose.php) с целью построить объект, описывающий таблицу 'person'.
При выполнении скрипта получаю ответ (при debugLevel = 5):
DataObjects_Person: CONNECT: Checking for database specific ini ('') : database_ in options
DataObjects_Person: CONNECT: NEW CONNECTION TP DATABASE :
DataObjects_Person: CONNECT:
mysql://root@localhost/DB_YAMAHA a9f52db4180156a7919157c5a2b352e2
где "DB_YAMAHA" — название базы данных, используемой для тестов.
Причем, после создания объекта DataObject для таблицы 'person' при просмотре этого объекта (распечатка при помощи print_r) он содержит практически пустые поля:
DataObjects_Person Object ( [id] => [name] => [friend] => [_DB_DataObject_version] => 1.8.10 [__table] => [N] => 0 [_database_dsn] => [_database_dsn_md5] => [_database] => [_query] => Array ( [condition] => [group_by] => [order_by] => [having] => [limit_start] => [limit_count] => [data_select] => * ) [_DB_resultid] => [_resultFields] => [_link_loaded] => [_join] => [_lastError] => )
Поле 'table__' в этом объекте пустое.
Если же использовать не переопределенный класс DataObjects_Person, а тот который автоматически создается при помощи createTables.php, то поле
'table__' = 'pearson' в остальном результат (ответ, который выводится на экран при выполнении index.php) тот же.
Контекст использования:
Использую PEAR в связке с Denwer без установки и прописывания путей в php.ini.
Для тестов создана отдельная папка в каталоге home в структуре Denwer — т.е. создан отдельный сайт.
Структура такая:
index.php
example.ini
includes
|
dbtest
|
DB_YAMAHA.ini
Person.php
...
pear
|
PEAR
| |
| ChannelFile
| Command
| Downloader
| ...
DB
|
DataObject
| |
| Cast.php
| createTables.php
| ...
DB
||
|sybase.php
|storage.php
|...
|
MDB2
| |
| Driver
|
DataObject.php
DB.php
В index.php в начале прописаны пути для PEAR:
$path = 'pear';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
$path = 'pear\PEAR';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
Есть подозрение, что не правильно настраиваю подключение объекта к ini файлу, описывающему базу данных.
Но в руководстве пользователя (
http://pear.php.net/package/DB_DataObject/docs) пока что не найдено никаких ключей к этому вопросу.
Где можно посмотреть варианты возможного решения проблемы?
Что возможно сделать в такой ситуации и что можно исправить?
Как вы считаете?
Здравствуйте, php_ddd, Вы писали:
Если еще актуально
А что написано в DataObjects_Person:QUERY при debugLevel = 5?
Должно быть
DataObjects_Person: QUERY : SELECT * FROM person
DataObjects_Person : query : QUERY DONE IN X seconds
...
Здравствуйте, Antidote, Вы писали:
Дело в том, что последним сообщение, отданным DataObjects_Person в режиме debugLevel = 5 является
DataObjects_Person: CONNECT:
mysql://root@localhost/DB_YAMAHA a9f52db4180156a7919157c5a2b352e2
Далее ничего нет.
Такие дела.
Здравствуйте, php_ddd, Вы писали:
_>Здравствуйте, Antidote, Вы писали:
_>Дело в том, что последним сообщение, отданным DataObjects_Person в режиме debugLevel = 5 является
_>DataObjects_Person: CONNECT: mysql://root@localhost/DB_YAMAHA a9f52db4180156a7919157c5a2b352e2
_>Далее ничего нет.
_>Такие дела.
Вот мой лог:
DataObject : find :
DataObject : CONNECT : Checking for database specific ini ('') : database_ in options
DataObject : CONNECT : NEW CONNECTION TP DATABASE :
DataObject : CONNECT : mysql://userName:password@servername/databaseName ba19f5523d0afa35345e1ce15e836c85
DataObject : CONNECT : a:1:{s:32:"ba19f5523d0afa35345e1ce15e836c85";O:8:"DB_mysql":8...
DataObject : databaseStructure : Loaded ini file: C:\.../databaseName.ini
DataObject : QUERY : SELECT * ....
У вас есть ini файл? Как вы создавали DataObjectName.php файлы?
Auto Building?
ПыСы: постараюсь чаще заглядывать сюда, чтобы чаще отвечать
Здравствуйте, Antidote, Вы писали:
A>Вот мой лог:
A>A>DataObject : find :
A>DataObject : CONNECT : Checking for database specific ini ('') : database_ in options
A>DataObject : CONNECT : NEW CONNECTION TP DATABASE :
A>DataObject : CONNECT : mysql://userName:password@servername/databaseName ba19f5523d0afa35345e1ce15e836c85
A>DataObject : CONNECT : a:1:{s:32:"ba19f5523d0afa35345e1ce15e836c85";O:8:"DB_mysql":8...
A>DataObject : databaseStructure : Loaded ini file: C:\.../databaseName.ini
A>DataObject : QUERY : SELECT * ....
A>
A>У вас есть ini файл? Как вы создавали DataObjectName.php файлы? Auto Building?
A>ПыСы: постараюсь чаще заглядывать сюда, чтобы чаще отвечать
Здравствуйте.
Дело на данный момент в следующем: перенес код на домашнюю машину (все делал на работе) и запустил для другой тестовой базы. Все заработало.
Дома тоже стоит денвер в той же конфигурации. Сам код перенесен без изменений.
Ini-файл для базы и классы, описывающие таблицы простроил действительно при помощи createTables как описано в руководстве по auto building.
Что и как копать в данном случае я примерно представляю — надо еще раз проверить среду выполнения кода на разных машинах.
Спасибо за ваше участие. В целом вопрос можно считать закрытым.