You are looking at the HTML representation of the XML format.
HTML is good for debugging, but is unsuitable for application use.
Specify the format parameter to change the output format.
To see the non HTML representation of the XML format, set format=xml.
See the complete documentation, or API help for more information.
<?xml version="1.0"?>
    <allpages gapcontinue="Setup_a_SVN_Server_on_a_Shared_Hosting" />
      <page pageid="41" ns="0" title="RedBeanPHP Cheat Sheet">
          <rev contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">[ RedBeanPHP site]

I love RBPHP since it's single file light-weight x-DB and clean ORM. -- my opinion (R) --

This is by no means complete cheat sheet; many things were left out, see [ full documentation] for all tips and tricks.

In code samples, PHP 5.4+ array notation is used; replace with array(...) notation of PHP &lt; 5.4.

== Basics and CRUD ==

[ Download RedBeanPHP]

&lt;pre&gt;require 'rb.php';

R::setup();                                                            // creates test SQLite DB in /tmp
R::setup('mysql:host=localhost;dbname=mydatabase', 'user', 'pass');    // MySQL and MariaDB
R::setup('pgsql:host=localhost;dbname=mydatabase', 'user', 'pass');    // PostgreSQL
R::setup('sqlite:/tmp/dbfile.db');                                     // SQLite
R::setup('cubrid:host=localhost;port=30000;dbname=mydb', 'U','P');     // CUBRID (requires [ plugin pack])

$is_connected = R::testConnection();

// when done (not yet :) - disconnect

// create a new bean, and setting some properties (member and array access supported);
// the bean name has to be lowercase alphabetical;
// properties names have to contain only alphanumeric and underscore
$book = R::dispense('book');
$book-&gt;title = 'Learn to Program';
$book['rating'] = 10;
$book['price'] = 29.99;

// save it - if table does not exist, RBPHP will create it based on added properties;
// if it does exist, RBPHP will update the table to hold any new data, if necessary
$id = R::store($book);

// MySQL/MariaDB compatible DB's provide insert ID
R::exec('INSERT INTO ... ');
$id = R::getInsertID();

// reading a bean by ID, or multiple by array of ID's
$book = R::load('book', $id);
$books = R::loadAll('book', $ids);

// updating a bean
$book-&gt;title = 'Learn to fly';
$book-&gt;rating = 'good';             // rating will be changed from integer to varchar
$book-&gt;published = '2015-02-15';    // column will be added, type 'date'; R::isoDate() and R::isoDateTime() generate current date(time)

// deleting a bean or multiple beans

// delete all beans of given type

// destroy the whole DB

// reload bean from DB
$bean = $bean-&gt;fresh();&lt;/pre&gt;

=== Fluid and Freeze ===

In all of the above examples, schema is automatically updated by RBPHP. This is good when developing and testing, but unwanted on production. You can freeze the schema, and force RBPHP to work only with what it has.

Note that the schema RBPHP generates is typically far from production style - always review the schema generated, and update to your needs; then freeze and go on with stable DB schema.

&lt;pre&gt;// freeze all tables, no alterations possible
// freeze just some tables, others are fluid
// back to (default) fluid mode

== Select / Query / Transactions ==

&lt;pre&gt;$book = R::find('book', 'rating &gt; 4');
$books = R::find('book', 'title LIKE ?', ['Learn to%']);    // with bindings
$promotions = R::find('person', 'contract_id IN ('.R::genSlots($contractIDs).')', $contractIDs);    // R::genSlots() generates ?'s for bindings
$book = R::findOne('book', 'title = ?', ['SQL Dreams']);    // returns single bean, not array; NULL if none found

// find all, no WHERE's
$books = R::findAll('book');
$books = R::findAll('book' , 'ORDER BY title DESC LIMIT 10');

// all of find(), findOne(), and findAll() support named slots
$books = R::find('book', 'rating &lt; :rating', [':rating' =&gt; 2]);

// using cursors - saves on loading
$collection = R::findCollection('page', 'ORDER BY content ASC LIMIT 5');
while($item = $collection-&gt;next())
    // process bean $item

// find with multiple possible values
R::findLike('flower', ['color' =&gt; ['yellow', 'blue']], 'ORDER BY color ASC');

// if the bean does not exist, it's created
$book = R::findOrCreate('book', ['title' =&gt; 'my book', 'price' =&gt; 50]);

// raw queries
R::exec('UPDATE page SET title=&quot;test&quot; WHERE id = 1');
// results as multidimensional array, and with parameters binding; returns array of arrays
R::getAll('SELECT * FROM page');
R::getAll('SELECT * FROM page WHERE title = :title', [':title' =&gt; 'home']);
// single row, as array
R::getRow('SELECT * FROM page WHERE title LIKE ? LIMIT 1', ['%Jazz%']);
// single column, as array
R::getCol('SELECT title FROM page');
// single cell, as value
R::getCell('SELECT title FROM page LIMIT 1');
// use first column as key of the array, and second column as value
R::getAssoc('SELECT id, title FROM page');

// transactions - store(), trash() etc. throw exceptions, so when you &quot;catch&quot; you can perform rollback:
    R::store( $page );
catch( Exception $e )

// transaction closure
R::transaction(function() { some beans..

== Other Helpful Stuff ==

&lt;pre&gt;// get tables in current DB
$listOfTables = R::inspect();
// get columns of the table
$fields = R::inspect('book');

// add a new DB connection
R::addDatabase('DB1', 'sqlite:/tmp/d1.db', 'user', 'pass', $frozen);
// use DB connection; to use the one connected to in R::setup(), use 'default' as DB alias
      <page pageid="19" ns="0" title="Rip Video DVD that is not Finalized">
          <rev contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">== How to Rip Video-DVD that was not Finalized by the DVD Recorder ==

Suppose your DVD drive is visible as &lt;tt&gt;/dev/dvd&lt;/tt&gt; block device on your computer.

=== List All Tracks on the DVD ===

You can use excellent &lt;tt&gt;dvd+rw-mediainfo&lt;/tt&gt; to list content of almost any DVD, finalized or not.

&lt;pre&gt;$ dvd+rw-mediainfo /dev/dvd
... info about the drive and disk ...
 Disc status:           appendable
 Number of Sessions:    1
 State of Last Session: incomplete
 &quot;Next&quot; Track:          1
 Number of Tracks:      8
 Track State:           reserved incremental
 Track Start Address:   0*2KB
 Next Writable Address: 0*2KB
 Free Blocks:           12272*2KB
 Track Size:            12272*2KB
 Track State:           complete incremental
 Track Start Address:   12288*2KB
 Free Blocks:           0*2KB
 Track Size:            456984*2KB
 Last Recorded Address: 469271*2KB
... remaining tracks info ...&lt;/pre&gt;

This disc cannot be generally read since its status is ''appendable'', and it's last session is ''incomplete''.

But as long as the tracks are ''complete incremental'', they still can be accessed/ripped.

=== Rip a Track ===

Lets rip the second track.

&lt;pre&gt;$ dd bs=2048 skip=12288 count=456984 if=/dev/dvd of=/tmp/track2.vob
456984+0 records in
456984+0 records out
935903232 bytes (893 MB) copied, 424.368 seconds, 2.1 MB/s&lt;/pre&gt;

That's it. The &lt;tt&gt;/tmp/track2.vob&lt;/tt&gt; file is a VOB with the second track, which is pretty much just MPEG with header with timestamps.

You can ffmpeg it into MPEG using just &lt;tt&gt;-vcodec copy -acodec copy&lt;/tt&gt;.</rev>