summaryrefslogtreecommitdiff
path: root/trunk/reprap/web/james-bom/MDB2/MDB2-2.4.1/docs/examples/example.php
blob: 97023e3a1fc068bd7c4d436480c55042fc51ec54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
<?php

    // $Id: example.php,v 1.24 2006/05/31 14:38:06 lsmith Exp $
    //
    // MDB2 and MDB2_Schema example script.
    //

    ini_set('include_path', '../..'.PATH_SEPARATOR.ini_get('include_path'));

    // require the MDB2 code
    require_once 'MDB2.php';

    // define and set a PEAR error handler
    // will be called whenever an unexpected PEAR_Error occurs
    function handle_pear_error ($error_obj)
    {
        print '<pre><b>PEAR-Error</b><br />';
        echo $error_obj->getMessage().': '.$error_obj->getUserinfo();
        print '</pre>';
    }
    PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handle_pear_error');

    // just for kicks you can mess up this part to see some pear error handling
    $user = 'root';
    $pass = '';
    $host = 'localhost';
    $mdb2_name = 'metapear_test_db';
    $mdb2_type = !empty($_GET['db_type']) ? $_GET['db_type'] : 'mysql';
    echo($mdb2_type.'<br>');

    // Data Source Name: This is the universal connection string
    $dsn['username'] = $user;
    $dsn['password'] = $pass;
    $dsn['hostspec'] = $host;
    $dsn['phptype'] = $mdb2_type;
    // MDB2::factory will return a PEAR::MDB2 instance on success
    // or a Pear MDB2 error object on error
    // You can alternatively build a dsn here
    // $dsn = "$mdb2_type://$user:$pass@$host/$mdb2_name";
    Var_Dump($dsn);
    $mdb2 =& MDB2::factory($dsn);
    // With PEAR::isError you can differentiate between an error or
    // a valid connection.
    if (PEAR::isError($mdb2)) {
        die (__LINE__.$mdb2->getMessage());
    }

    // this loads the MDB2_Schema manager
    // this is a separate package you must install
    require_once 'MDB2/Schema.php';
    // you can either pass a dsn string, a dsn array or an exisiting mdb2 connection
    $schema =& MDB2_Schema::factory($mdb2);
    $input_file = 'metapear_test_db.schema';
    // lets create the database using 'metapear_test_db.schema'
    // if you have allready run this script you should have 'metapear_test_db.schema.before'
    // in that case MDB2 will just compare the two schemas and make any
    // necessary modifications to the existing database
    Var_Dump($schema->updateDatabase($input_file, $input_file.'.before'));
    echo('updating database from xml schema file<br>');

    echo('switching to database: '.$mdb2_name.'<br>');
    $mdb2->setDatabase($mdb2_name);
    // happy query
    $query ='SELECT * FROM test';
    echo('query for the following examples:'.$query.'<br>');
    // run the query and get a result handler
    $result = $mdb2->query($query);
    // lets just get row:0 and free the result
    $array = $result->fetchRow();
    $result->free();
    echo('<br>row:<br>');
    echo(Var_Dump($array).'<br>');
    $result = $mdb2->query($query);
    // lets just get row:0 and free the result
    $array = $result->fetchRow(MDB2_FETCHMODE_OBJECT);
    $result->free();
    echo('<br>row (object:<br>');
    echo(Var_Dump($array).'<br>');
    // run the query and get a result handler
    $result = $mdb2->query($query);
    // lets just get row:0 and free the result
    $array = $result->fetchRow();
    $result->free();
    echo('<br>row from object:<br>');
    echo(Var_Dump($array).'<br>');
    // run the query and get a result handler
    $result = $mdb2->query($query);
    // lets just get column:0 and free the result
    $array = $result->fetchCol(2);
    $result->free();
    echo('<br>get column #2 (counting from 0):<br>');
    echo(Var_Dump($array).'<br>');
    // run the query and get a result handler
    $result = $mdb2->query($query);
    Var_Dump($mdb2->loadModule('Reverse', null, true));
    echo('tableInfo:<br>');
    echo(Var_Dump($mdb2->reverse->tableInfo($result)).'<br>');
    $types = array('integer', 'text', 'timestamp');
    $result->setResultTypes($types);
    $array = $result->fetchAll(MDB2_FETCHMODE_FLIPPED);
    $result->free();
    echo('<br>all with result set flipped:<br>');
    echo(Var_Dump($array).'<br>');
    // save some time with this function
    // lets just get all and free the result
    $array = $mdb2->queryAll($query);
    echo('<br>all with just one call:<br>');
    echo(Var_Dump($array).'<br>');
    // run the query with the offset 1 and count 1 and get a result handler
    Var_Dump($mdb2->loadModule('Extended', null, false));
    $result = $mdb2->extended->limitQuery($query, null, 1, 1);
    // lets just get everything but with an associative array and free the result
    $array = $result->fetchAll(MDB2_FETCHMODE_ASSOC);
    echo('<br>associative array with offset 1 and count 1:<br>');
    echo(Var_Dump($array).'<br>');
    // lets create a sequence
    echo(Var_Dump($mdb2->loadModule('Manager', null, true)));
    echo('<br>create a new seq with start 3 name real_funky_id<br>');
    $err = $mdb2->manager->createSequence('real_funky_id', 3);
    if (PEAR::isError($err)) {
            echo('<br>could not create sequence again<br>');
    }
    echo('<br>get the next id:<br>');
    $value = $mdb2->nextId('real_funky_id');
    echo($value.'<br>');
    // lets try an prepare execute combo
    $alldata = array(
                     array(1, 'one', 'un'),
                     array(2, 'two', 'deux'),
                     array(3, 'three', 'trois'),
                     array(4, 'four', 'quatre')
    );
    $stmt = $mdb2->prepare('INSERT INTO numbers VALUES(?,?,?)', array('integer', 'text', 'text'), MDB2_PREPARE_MANIP);
    foreach ($alldata as $row) {
        echo('running execute<br>');
        $stmt->bindValueArray($row);
        $stmt->execute();
    }
    $array = array(4);
    echo('<br>see getOne in action:<br>');
    echo(Var_Dump($mdb2->extended->getOne('SELECT trans_en FROM numbers WHERE number = ?',null,$array,array('integer'))).'<br>');
    $mdb2->setFetchmode(MDB2_FETCHMODE_ASSOC);
    echo('<br>default fetchmode ist now MDB2_FETCHMODE_ASSOC<br>');
    echo('<br>see getRow in action:<br>');
    echo(Var_Dump($mdb2->extended->getRow('SELECT * FROM numbers WHERE number = ?',array('integer','text','text'),$array, array('integer'))));
    echo('default fetchmode ist now MDB2_FETCHMODE_ORDERED<br>');
    $mdb2->setFetchmode(MDB2_FETCHMODE_ORDERED);
    echo('<br>see getCol in action:<br>');
    echo(Var_Dump($mdb2->extended->getCol('SELECT * FROM numbers WHERE number != ?',null,$array,array('integer'), 1)).'<br>');
    echo('<br>see getAll in action:<br>');
    echo(Var_Dump($mdb2->extended->getAll('SELECT * FROM test WHERE test_id != ?',array('integer','text','text'), $array, array('integer'))).'<br>');
    echo('<br>see getAssoc in action:<br>');
    echo(Var_Dump($mdb2->extended->getAssoc('SELECT * FROM test WHERE test_id != ?',array('integer','text','text'), $array, array('integer'), MDB2_FETCHMODE_ASSOC)).'<br>');
    echo('tableInfo on a string:<br>');
    echo(Var_Dump($mdb2->reverse->tableInfo('numbers')).'<br>');
    echo('<br>just a simple update query:<br>');
    echo('<br>affected rows:<br>');
    echo(Var_Dump($mdb2->exec('UPDATE numbers set trans_en ='.$mdb2->quote(0, 'integer'))).'<br>');
    // subselect test
    $sub_select = $mdb2->subSelect('SELECT test_name from test WHERE test_name = '.$mdb2->quote('gummihuhn', 'text'), 'text');
    echo(Var_Dump($sub_select).'<br>');
    $query_with_subselect = 'SELECT * FROM test WHERE test_name IN ('.$sub_select.')';
    // run the query and get a result handler
    echo($query_with_subselect.'<br>');
    $result = $mdb2->query($query_with_subselect);
    $array = $result->fetchAll();
    $result->free();
    echo('<br>all with subselect:<br>');
    echo('<br>drop index (will fail if the index was never created):<br>');
    echo(Var_Dump($mdb2->manager->dropIndex('test', 'test_id_index')).'<br>');
    $index_def = array(
        'fields' => array(
            'test_id' => array(
                'sorting' => 'ascending'
            )
        )
    );
    echo('<br>create index:<br>');
    echo(Var_Dump($mdb2->manager->createIndex('test', 'test_id_index', $index_def)).'<br>');

    if ($mdb2_type == 'mysql') {
        $schema->db->setOption('debug', true);
        $schema->db->setOption('log_line_break', '<br>');
        // ok now lets create a new xml schema file from the existing DB
        $database_definition = $schema->getDefinitionFromDatabase();
        // we will not use the 'metapear_test_db.schema' for this
        // this feature is especially interesting for people that have an existing Db and want to move to MDB2's xml schema management
        // you can also try MDB2_MANAGER_DUMP_ALL and MDB2_MANAGER_DUMP_CONTENT
        echo(Var_Dump($schema->dumpDatabase(
            $database_definition,
            array(
                'output_mode' => 'file',
                'output' => $mdb2_name.'2.schema'
            ),
            MDB2_SCHEMA_DUMP_STRUCTURE
        )).'<br>');
        if ($schema->db->getOption('debug') === true) {
            echo($schema->db->getDebugOutput().'<br>');
        }
        // this is the database definition as an array
        echo(Var_Dump($database_definition).'<br>');
    }

    echo('<br>just a simple delete query:<br>');
    echo(Var_Dump($mdb2->exec('DELETE FROM numbers')).'<br>');
    // You can disconnect from the database with:
    $mdb2->disconnect()
?>