3 * MySQL database connection/querying layer
5 * SourceForge: Breaking Down the Barriers to Open Source Development
6 * Copyright 1999-2001 (c) VA Linux Systems
7 * http://sourceforge.net
13 * System-wide database type
15 * @var constant $sys_database_type
17 $sys_database_type='mysql';
20 * db_connect() - Connect to the database
22 * Notice the global vars that must be set up
23 * Sets up a global $conn variable which is used
24 * in other functions in this library
26 function db_connect() {
27 global $sys_dbhost,$sys_dbuser,$sys_dbpasswd,
28 $conn,$conn_update,$sys_db_use_replication,$sys_dbreadhost;
30 if ($sys_db_use_replication) {
32 // if configured for replication, $conn is the read-only host
33 // we do not connect to update server until needed
35 $conn = @mysql_pconnect($sys_dbreadhost,$sys_dbuser,$sys_dbpasswd);
36 $conn_update=@mysql_pconnect($sys_dbhost,$sys_dbuser,$sys_dbpasswd);
38 $conn = @mysql_pconnect($sys_dbhost,$sys_dbuser,$sys_dbpasswd);
44 * db_query() - Query the database
46 * @param string SQL statement
47 * @param int How many rows do you want returned
48 * @param int Of matching rows, return only rows starting here
50 function db_query($qstring,$limit='-1',$offset=0) {
51 global $QUERY_COUNT,$sys_db_use_replication,$sys_db_is_dirty,
52 $sys_dbname,$conn,$conn_update,$sys_dbhost,$sys_dbuser,$sys_dbpasswd;
56 if (!$offset || $offset < 0) {
59 $qstring=$qstring." LIMIT $offset,$limit";
61 if ($GLOBALS['IS_DEBUG'])
62 $GLOBALS['G_DEBUGQUERY'] .= $qstring . "<p><br />\n";
65 //are we configured to try to use replication?
67 if ($sys_db_use_replication) {
69 //if we haven't yet done an insert/update,
70 //read from the read-only db
72 if (!$sys_db_is_dirty && eregi("^( )*(select)",$qstring)) {
73 if ($QUERY_COUNT%3==0) {
74 // 1/3rd of read queries go to master for now
75 return @mysql_db_query($sys_dbname,$qstring,$conn_update);
77 return @mysql_db_query($sys_dbname,$qstring,$conn);
80 //must be an update/insert/delete query - go to master server
81 $sys_db_is_dirty=true;
82 return @mysql_db_query($sys_dbname,$qstring,$conn_update);
85 return @mysql_db_query($sys_dbname,$qstring,$conn);
90 * db_begin() - Begin a transaction
92 * Begin a transaction for databases that support them
93 * may cause unexpected behavior in databases that don't
96 return db_query("BEGIN WORK");
100 * db_commit() - Commit a transaction
102 * Commit a transaction for databases that support them
103 * may cause unexpected behavior in databases that don't
105 function db_commit() {
106 return db_query("COMMIT");
110 * db_rollback() - Roll back a transaction
112 * Rollback a transaction for databases that support them
113 * may cause unexpected behavior in databases that don't
115 function db_rollback() {
116 return db_query("ROLLBACK");
120 * db_numrows() - Returns the number of rows in this result set
122 * @param string Query result set handle
124 function db_numrows($qhandle) {
125 // return only if qhandle exists, otherwise 0
127 return @mysql_numrows($qhandle);
134 * db_free_result() - Frees a database result properly
136 * @param string Query result set handle
138 function db_free_result($qhandle) {
139 return @mysql_free_result($qhandle);
143 * db_reset_result() - Reset a result set.
145 * Reset is useful for db_fetch_array sometimes you need to start over
147 * @param string Query result set handle
148 * @param int Row number
150 function db_reset_result($qhandle,$row=0) {
151 return mysql_data_seek($qhandle,$row);
155 * db_result() - Returns a field from a result set
157 * @param string Query result set handle
158 * @param int Row number
159 * @param string Field name
161 function db_result($qhandle,$row,$field) {
162 return @mysql_result($qhandle,$row,$field);
166 * db_numfields() - Returns the number of fields in this result set
168 * @param string Query result set handle
170 function db_numfields($lhandle) {
171 return @mysql_numfields($lhandle);
175 * db_fieldname() - Returns the number of rows changed in the last query
177 * @param string Query result set handle
178 * @param int Column number
180 function db_fieldname($lhandle,$fnumber) {
181 return @mysql_fieldname($lhandle,$fnumber);
185 * db_affected_rows() - Returns the number of rows changed in the last query
187 * @param string Query result set handle
189 function db_affected_rows($qhandle) {
190 return @mysql_affected_rows();
194 * db_fetch_array() - Fetch an array
196 * Returns an associative array from
197 * the current row of this database result
198 * Use db_reset_result to seek a particular row
200 * @param string Query result set handle
202 function db_fetch_array($qhandle) {
203 return @mysql_fetch_array($qhandle);
207 * db_insertid() - Returns the last primary key from an insert
209 * @param string Query result set handle
210 * @param string Is the name of the table you inserted into
211 * @param string Is the field name of the primary key
213 function db_insertid($qhandle,$table_name,$pkey_field_name) {
214 return @mysql_insert_id();
218 * db_error() - Returns the last error from the database
220 function db_error() {
221 return @mysql_error();