Hi!

> I've started work on a database abstraction module (written in C) and was
> wondering if anybody had any thoughts to add to mine in order to develop a
> good solution.
> The working name for this is the dbx-module.
> The dbx-module will become available under an Open Source license (not
> sure which one, I would be happy if it became a part of the php-cvs-tree,
> but I'll think on it) as soon as I have the points mentioned (way...)
> below implemented and tested.
> So, here is a description of how things stand at the moment...
> 
> 
> I currently have 4 functions that can do most things I want:
> 
> dbx_connect(string module_name, string hostname, string username, string
> password)
>       // returns a dbx_connection object or false on failure
>       // checks if the given module is loaded, if so the db-functions of
> this
>       // module are used
> A dbx_connection object that is returned by dbx_connect has the members
>       $db->handle
>       $db->module
> The handle member is the actual handle you get from e.g. a mysql_connect
> call and as such can be used in native mysql-functions (like mysql_close).
> The module member is for internal use by the dbx-module only. 
> 
> dbx_query(dbx_connection handle, string sql_statement, long flags)
>       // returns a dbx_query_result object on a successful query that
> returns data
>       // or true for a successful other query (insert, delete) or false on
> failure
>       // flags can be used to alter the amoount of returned info
> A dbx_query_result object that is returned by dbx_query (if it returned
> data) has the members
>       $q->handle
>       $q->rows
>       $q->cols
>       $q->info['name'][column_index]
>       $q->info['type'][column_index]
>       $q->data[row_index][column_index | 'column_name']
> The handle member is the actual handle you get from e.g. a mysql_query
> call and as such can be used in native mysql-functions (like
> mysql_fetch_row).
> The rows member contains the number of rows returned
> The cols member contains the number of columns returned
> The info array holds field-information that can only be accessed
> associatively, currently only field-name and type. The flags used in a
> call to dbx_query determine the amount of info returned.
> The data array holds the complete rows x cols data returned from the
> query, and can be accessed by row-index (0..rows-1) and column-index
> (0..cols-1) or field-name. The flags used in a call to dbx_query could
> also be used to specify if you just want indexed columns, just associated
> columns or both.
> 
> dbx_close(dbx_connection handle)
>       // return true or false
> 
> dbx_error(dbx_connection handle)
>       // returns a string containing all error-messages from the last call
> to any other dbx_function (on the same connection)
> 
> Current status of the dbx-module:
> The dbx_connect, dbx_query and dbx_close functions are implemented (and
> seem to work ok), dbx_error is next.
> The only database that is abstracted so far is MySQL, ODBC is next,
> MSSQLServer after that (these are the only db's I can actually test at the
> moment).
> Development is done on my windows-box now, but since it's all standard
> C-stuff it should compile on Linux too (which I'll try after dbx_error and
> ODBC implementation)
> 
> 
> So, if any of you with an interest in this could add your $0.02 we might
> even get to $1.00 :-)
> 
> Cheerio, Marc.
> 
> 
> 
> 
> As an example of a piece of PHP-script that uses the dbx-module (connects,
> selects a db, executes an update query, displays all results (twice) from
> a select query, closes):
> 
> <?php 
> 
>     $dbname='MyDatabase';
>     $id=5930;
>     // connect 
>     $dbhandle = dbx_connect("mysql", "localhost", "", "");
>     echo "<b>dbx_handle (from dbx_connect):</b> "; print_r($dbhandle);
> echo "<br>";
>     echo "<p>";
>     // execute queries
>     $result = dbx_query($dbhandle, "use $dbname");
>         if ($result==0) echo "No data returned, query failed\n<br>";
>         if ($result==1) echo "No data returned, query succeeded\n<br>";
>     $result = dbx_query($dbhandle, "update sys_update set
> info='blablabla'");
>         if ($result==0) echo "No data returned, query failed\n<br>";
>         if ($result==1) echo "No data returned, query succeeded\n<br>";
>     echo '<p>';
>     // select query
>     $q = dbx_query($dbhandle, "select id, parentid, description from
> tbl_info where parentid={$id} and language=1 order by id");
>     if     ($q==0) echo "No data returned, query failed\n<br>";
>     elseif ($q==1) echo "No data returned, query succeeded\n<br>";
>     else {
>         $rows=$q->rows;
>         $cols=$q->cols; 
>         echo $q->handle . "<p>table dimension: {$q->rows} x
> {$q->cols}<br><table border=1>\n";
>         echo "<tr>";
>         for($col=0; $col<$cols; ++$col) {
>             echo
> "<td>-{$q->info["name"][$col]}-<br>-{$q->info["type"][$col]}-</td>";
>             }
>         echo "</tr>\n";
>         for($row=0; $row<$rows; ++$row) {
>             echo "<tr>";
>             for($col=0; $col<$cols; ++$col) {
>                 echo "<td>-{$q->data[$row][$col]}-</td>";
>                 }
>             echo "</tr>\n";
>             }
>         echo "</table><p>\n";
>         echo "table dimension: {$q->rows} x id, parentid,
> description<br><table border=1>\n";
>         for($row=0; $row<$rows; ++$row) {
>             echo "<tr>";
>                 echo "<td>-{$q->data[$row]["id"]}-</td>";
>                 echo "<td>-{$q->data[$row]["parentid"]}-</td>";
>                 echo "<td>-{$q->data[$row]["description"]}-</td>";
>             echo "</tr>\n";
>             }
>         echo "</table><p>\n";
>         }
>     echo '<p>';
>     // error reporting // this doesn't work yet, so a bogus string is
> returned
>     echo '<b>dbx_error:</b> ' . dbx_error() . '</b><br>';
>     echo '<p>';
>     // close
>     $result = dbx_close($dbhandle); //  mysql_close($dbhandle->handle);
> works too!
>     echo '<b>result of dbx_close:</b> ' . $result . '<br>';
> ?>
> 
> Result of this script:
> 
> dbx_handle (from dbx_connect): stdClass Object ( [handle] => Resource id
> #1 [module] => 1 ) 
> No data returned, query succeeded 
> No data returned, query succeeded 
> Resource id #2 
> table dimension: 3 x 3
> -id-      -parentid--description-     
> -int-     -int-     -string-
> -1002-    -5930-    -Description X-   
> -5931-    -5930-    -Info menu-       
> -5937-    -5930-    -Info misc.-      
> table dimension: 3 x id, parentid, description
> -1002-    -5930-    -Description X-   
> -5931-    -5930-    -Info menu-       
> -5937-    -5930-    -Info misc.-      
> dbx_error: blobloblo
> result of dbx_close: 1
> 
> 
> 

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to