This class can be used to execute prepared queries to MySQL databases. This class provides a SAFE, clean, object oriented, and efficient way to do database development. All queries except those with multiple row results return exactly what you need in ONE LINE OF CODE. Inserts return insert ID: $insert_id = $db->pinsert('INSERT INTO sometable (somestring,someint) VALUES (?,?)','si',$string,$int); Updates return count of rows affected: $rows_affected = $db->pexecute('UPDATE sometable SET somestring = ? WHERE someint = ? LIMIT 1','si',$string,$int); Deletes return count of rows affected: $rows_affected = $db->pexecute('DELETE FROM sometable WHERE someint = ? LIMIT 1','i',$int); Just count rows return without reading the data: $row_returned = $db->prows('SELECT something FROM sometable WHERE somestring = ? AND someint >= ?', 'si' , $string,$int ); Select a single row and return an object containing the data. $obj = $db->psingle('SELECT someint,somestring FROM sometable WHERE someint = ? LIMIT 1','i',$int); print $obj->someint; print $obj->somestring; Select multiple rows and return a handle. $some_sth = $db->pbind('SELECT somestring FROM sometable WHERE someint = ?','i',$int); while ( $row = $some_sth->fetch_object() ) { print $row->somestring; } $some_sth->close(); This is all done while still maintaining use of prepared queries and bound parameters to eliminate the risk of SQL injection attacks and operate more efficiently. No extra coding is needed on your part to reuse prepared queries. You simply write the same query again, and if you have done that one before, the prepared handle is reused. The newly bound parameters are used against the existing prepared handle, and the results are recomputed. The results themselves are not cached. So there you have it. Simple use of prepared queries with bound parameters, while still having access to the fetch_object and fetch_assoc methods. Now you have no excuse.