Re: DB_DataObject: what am I missing?
| From: | Justin Patrin | Date: | Sat, 22 Jan 2005 18:05:32 +0000 |
| Subject: | Re: DB_DataObject: what am I missing? | ||
| References: | 1 | Groups: | php.pear.general |
| Request: | Send a blank email to pear-general+get-17106@lists.php.net to get a copy of this message | ||
On Sat, 22 Jan 2005 15:33:52 +0000, Paul <pardel@gmail.com> wrote:
> Hi there!
>
> I am trying to use the DB_DataObject library from PEAR.
> I've created a table in a Mysql database:
>
> ----------------------------------------------------------------
> CREATE TABLE
note (
> note_id int(11) NOT NULL auto_increment,
> title varchar(255) NOT NULL default '',
> content mediumtext NOT NULL,
> creation_time datetime NOT NULL default '0000-00-00
> 00:00:00',
> modified_time datetime NOT NULL default '0000-00-00
> 00:00:00',
> PRIMARY KEY (note_id)
> ) TYPE=MyISAM;
> ----------------------------------------------------------------
>
> and I've used the createTable utility to create the class (although I
> had to generate the class on a different system because of a
>
> segfault in PHP 4.3.10 - http://bugs.php.net/bug.php?id=31106):
The fix for this is:
define('DB_DATAOBJECT_NO_OVERLOAD', 1);
Set this before you include any DO files in any script. This may also
fix your other problem. IMHO this should be disabled by default
because overloading breaks pass-by-ref.
>
> ----------------------------------------------------------------
> <?php
> /**
> * Table Definition for note
> */
> require_once 'DB/DataObject.php';
>
> class DataObjects_Note extends DB_DataObject
> {
> ###START_AUTOCODE
> /* the code below is auto generated do not remove the above tag */
>
> var $__table = 'note'; // table name
> var $note_id; // int(11) not_null
> primary_key auto_increment
> var $title; // string(255) not_null
> var $content; // blob(16777215) not_null blob
> var $creation_time; // datetime(19) not_null
> var $modified_time; // datetime(19) not_null
>
> /* ZE2 compatibility trick*/
> function __clone() { return $this;}
>
> /* Static get */
> function staticGet($k,$v=NULL) { return
> DB_DataObject::staticGet('DataObjects_Note',$k,$v); }
>
> /* the code above is auto generated do not remove the tag below */
> ###END_AUTOCODE
> }
> ----------------------------------------------------------------
>
> and the my_database.ini file:
>
> ----------------------------------------------------------------
> [note]
> note_id = 129
> title = 130
> content = 194
> creation_time = 142
> modified_time = 142
>
> [note__keys]
> note_id = N
> ----------------------------------------------------------------
>
> Everything is ok until now and I trying to create and use a
> DataObjects_Note object:
>
> ----------------------------------------------------------------
> <?php
> require_once ('PEAR.php') ;
>
> // configuration for PEAR::DB_DataObject
>
> $dataobject_options =
> &PEAR::getStaticProperty('DB_DataObject','options');
> $dataobject_options = array(
> 'database' =>
> 'mysql://user:pass@localhost/my_database',
> 'schema_location' =>
> '/home/user/public_html/test/class/DataObjects',
> 'class_location' =>
> '/home/user/public_html/test/class/DataObjects',
> 'require_prefix' => 'DataObjects/',
> 'class_prefix' => 'DataObjects_'
> ) ;
>
> DB_DataObject::debugLevel(5);
> $note = DB_DataObject::factory('note') ;
> $note->get(27);
> debug::var_dump($note);
> ?>
> ----------------------------------------------------------------
>
> Looks like the $note object is a 'dataobjects_note' but empty:
>
> ----------------------------------------------------------------
> object(dataobjects_note)(16)_DB_DataObject_version string(5) 1.7.2
>
> __table string(4) note
> N int 0
> _database_dsn string(0)
> _database_dsn_md5 string(0)
> _database string(0)
> _query array(6)condition string(0)
> group_by string(0)
> order_by string(0)
> having string(0)
> limit string(0)
> data_select string(1) *
> _DB_resultid NULL
> _link_loaded bool false
> _join string(0)
> _lastError bool false
> note_id NULL
> title NULL
> content NULL
> creation_time NULL
> modified_time NULL
> ----------------------------------------------------------------
>
> Although, the db debug shows that the record is grabbed:
>
> ----------------------------------------------------------------
> dataobjects_note: CONNECT: NEW CONNECTION
> dataobjects_note: CONNECT: mysql://user:pass@localhost/my_database
> 6e832c95de993b36266ded1b9c4806dc
> ...
> dataobjects_note: GET: note_id 27 Array ( [0] => note_id )
> dataobjects_note: __find: 1
> dataobjects_note: CONNECT: USING CACHED CONNECTION
> dataobjects_note: CONNECT: USING CACHED CONNECTION
> dataobjects_note: CONNECT: USING CACHED CONNECTION
> dataobjects_note: QUERY: SELECT * FROM note WHERE note.note_id = 27
> dataobjects_note: query: QUERY DONE IN 0.00065183639526367 seconds
> ...
> dataobjects_note: __find: CHECK autofetchd 1
> dataobjects_note: __find: ABOUT TO AUTOFETCH
> dataobjects_note: FETCH:
>
> a:5:{s:7:"note_id";s:2:"27";s:5:"title";s:10:"PostgreSQL";s:7:"content";s:111:"
> \\d ~= desc \\dt Show Tables
>
> \\dT list datatypes \\df list functions \\di list indexes \\dv list
> views";s:13:"creation_time";s:19:"2005-01-05
>
> 13:20:15";s:13:"modified_time";s:19:"2005-01-05 13:20:15";}
> dataobjects_note: fetchrow LINE: note_id = 27
> dataobjects_note: fetchrow LINE: title = PostgreSQL
> dataobjects_note: fetchrow LINE: content = \\d ~= desc \\dt Show
> Tables \\dT list datatypes \\df list functions \\di list indexes \\dv
>
> list views
> dataobjects_note: fetchrow LINE: creation_time = 2005-01-05 13:20:15
> dataobjects_note: fetchrow LINE: modified_time = 2005-01-05 13:20:15
> dataobjects_note: fetchrow: note DONE
> dataobjects_note: __find: DONE
> ----------------------------------------------------------------
>
> I'm using PHP 4.3.10, with PEAR 1.3.4, DB_DataObject 1.7.2 and
> Var_Dump 1.0.1, and MySQL 4.0.22-standard.
>
> What am I doing wrong?
--
Justin Patrin