On Wed, Jan 21, 2009 at 11:37:07AM -0600, Jay Moore wrote:

> This is a MySQL class I use and I wanted to get everyone's thoughts on
> how/if I can improve it.  This is for MySQL only.  I don't need to make
> it compatible with other databases.  I'm curious what you all think.
>
> Thanks,
> Jay
>
> Class:
> ------
> <?php
>
> // Standard MySQL class
> class do_mysql
> {
>       // Constructor
>       function __construct()
>       {
>               $this->do_mysql();
>       }
>
>       // Destructor
>       function __destruct()
>       {
>               //$this->close();
>       }
>
>       function do_mysql()
>       {
>               $this->login = '';
>               $this->pass = '';
>
>               $this->link = @mysql_connect('localhost', $this->login,
>               $this->pass)
> or die('Could not connect to the database.');
>       } // End do_mysql
>
>       // Functions
>       function close()
>       {
>               if ($this->link)
>               {
>                       mysql_close($this->link);
>                       unset($this->link);
>               }
>       } // End close
>
>       function fetch_array()
>       {
>               return mysql_fetch_array($this->result);
>       } // End fetch_array
>
>       function last_id()
>       {
>               return mysql_insert_id($this->link);
>       } // End last_id
>
>       function num_rows()
>       {
>               return mysql_num_rows($this->result);
>       } // End num_rows
>
>       function process($database = '')
>       {
>               if (is_null($this->query))
>               {
>                       die('Error:  Query string empty.  Cannot proceed.');
>               }
>
>               $this->db = @mysql_select_db($database, $this->link)
>               or die("Database
> Error:        Couldn't select $database <br />" . mysql_error());
>               $this->result = @mysql_query($this->query, $this->link) or
> die('Database Error:  Couldn\'t query. <br />' . mysql_error() . "<br
> /><br /> $this->query");
>       } // End process
>
>       function sanitize(&$ref)
>       {
>               $ref = mysql_real_escape_string($ref);
>       } // End sanitize
>
> } // End do_mysql
>
> ?>
>
>
> Sample usage:
> $value = 'value';
> $sql = new do_mysql();
> $sql->sanitize($value);
> $sql->query = "SELECT * FROM `wherever` WHERE `field` = '$value'";
> $sql->process('dbname');
> $sql->close();
>
> if ($sql->num_rows())
> {
>       while ($row = $sql->fetch_array())
>       {
>               do stuff;
>       }
> }
>

A couple of thoughts. First precede all your mysql_* calls with the at
sign (@) to shut up the routines if they generate text. I had this
problem, and that was the answer.

Second, store your connection resource as a class variable, so you can
pass it around to the various routines. Actually, you're already doing
this, but I prefer to do so explicitly, as:

var $link;

at the top of the class.

I have a similar class for PostgreSQL. I also have routines like
"update", which allow you to pass a table name and an associative array
of field values. Same thing for an "insert" routine.

Paul

-- 
Paul M. Foster

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to