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