PHP has a lot of warts, and one of those warts is its approach to database interactions. If you want to talk to a MySQL database, every function for doing it is prefixed mysql_
, and for say, Postgres, you’d use functions prefixed pg_
. On the other hand, it uses an object oriented approach for talking to SQLite3, while Oracle not only has a set of oci_
prefixed functions, but has to add a bunch of important functions that make it just different enough as to be difficult to switch to.
It’s a bit of a mess, is the point, and the result is that a lot of developers will write some wrapper functions to make it easier to write generic code that’s not tied to a specific database engine. That is, presumably, what Scott’s co-worker had in mind when building this library of wrapper functions:
function fetch_row($resource_result)
{
// array mysql_fetch_row ( resource result)
// Returns an array that corresponds to the fetched row, or FALSE if there are no more rows.
return mysql_fetch_row($resource_result);
}
Yes- the “wrapper” function is just essentially re-naming the function to strip off the mysql
prefix. And yes, Scott’s co-worker did this for every method that was part of the MySql
API.
Only one actually contained any logic:
function fetch_assoc($resource_result)
{
// array mysql_fetch_assoc ( resource result)
// Returns an associative array that corresponds to the fetched row, or FALSE if there are
// no more rows.
// check to see if we were sent a null resource
if($resource_result == null){
throw new Exception('NULL resource_result sent.');
}
return mysql_fetch_assoc($resource_result);
}
The rest simply contained copy-and-pasted documentation from the PHP.net documentation site:
function fetch_field($resource_result,$field_offset)
{
// object mysql_fetch_field ( resource result [, int field_offset])
// Returns an object containing field information.
// mysql_fetch_field() can be used in order to obtain information about fields in a certain
// query result. If the field offset isn't specified, the next field that wasn't yet
// retrieved by mysql_fetch_field() is retrieved.
return mysql_fetch_field($resource_result,$field_offset);
}
function fetch_lengths($resource_result)
{
// array mysql_fetch_lengths ( resource result)
// Returns an array that corresponds to the lengths of each field in the last row fetched
// by mysql_fetch_row(), or FALSE on error.
return mysql_fetch_lengths($resource_result);
}
function fetch_object($resource_result)
{
// object mysql_fetch_object ( resource result)
// Returns an object with properties that correspond to the fetched row, or FALSE if there
// are no more rows.
return mysql_fetch_object($resource_result);
}
function field_flags($resource_result)
{
// string mysql_field_flags ( resource result, int field_offset)
// mysql_field_flags() returns the field flags of the specified field. The flags are
// reported as a single word per flag separated by a single space, so that you can split the
// returned value using explode().
return mysql_field_flags($resource_result);
}
function field_len($resource_result,$field_offset)
{
// int mysql_field_len ( resource result, int field_offset)
// mysql_field_len() returns the length of the specified field.
return mysql_field_len($resource_result,$field_offset);
}
function field_name($resource_result,$field_offset)
{
// string mysql_field_name ( resource result, int field_index)
// mysql_field_name() returns the name of the specified field index. result must be a
// valid result identifier and field_index is the numerical offset of the field.
return mysql_field_name($resource_result,$field_offset);
}
function field_seek($resource_result,$field_offset)
{
// int mysql_field_seek ( resource result, int field_offset)
// Seeks to the specified field offset. If the next call to mysql_fetch_field() doesn't
// include a field offset, the field offset specified in mysql_field_seek() will be returned.
return mysql_field_seek($resource_result,$field_offset);
}
function field_table($resource_result,$field_offset)
{
// string mysql_field_table ( resource result, int field_offset)
// Returns the name of the table that the specifed field is in.
return mysql_field_table($resource_result,$field_offset);
}
function field_type($resource_result,$field_offset)
{
// string mysql_field_type ( resource result, int field_offset)
// mysql_field_type() is similar to the mysql_field_name() function. The arguments are
// identical, but the field type is returned instead. The field type will be one of "int",
// "real", "string", "blob", and others as detailed in the MySQL documentation.
return mysql_field_type($resource_result,$field_offset);
}
function free_result($resource_result)
{
// bool mysql_free_result ( resource result)
// mysql_free_result() will free all memory associated with the result identifier result.
return mysql_free_result($resource_result);
}
function get_client_info()
{
// string mysql_get_client_info ( void )
// mysql_get_client_info() returns a string that represents the client library version.
return mysql_get_client_info();
}
function get_host_info()
{
// string mysql_get_host_info ( [resource link_identifier])
// mysql_get_host_info() returns a string describing the type of connection in use for the
// connection link_identifier, including the server host name. If link_identifier is omitted,
// the last opened connection will be used.
return mysql_get_host_into();
}
function get_proto_info()
{
// int mysql_get_proto_info ( [resource link_identifier])
// mysql_get_proto_info() returns the protocol version used by connection link_identifier.
// If link_identifier is omitted, the last opened connection will be used.
return mysql_get_proto_info();
}
function get_server_info()
{
// string mysql_get_server_info ( [resource link_identifier])
// mysql_get_server_info() returns the server version used by connection link_identifier. If
// link_identifier is omitted, the last opened connection will be used.
return mysql_get_server_info();
}
function info()
{
// string mysql_info ( [resource link_identifier])
// mysql_info() returns detailed information about the last query using the given
// link_identifier. If link_identifier isn't specified, the last opened link is assumed.
return mysql_info();
}
function insert_id()
{
// int mysql_insert_id ( [resource link_identifier])
// mysql_insert_id() returns the ID generated for an AUTO_INCREMENT column by the previous
// INSERT query using the given link_identifier. If link_identifier isn't specified, the
// last opened link is assumed.
return mysql_insert_id();
}
function list_dbs()
{
// resource mysql_list_dbs ( [resource link_identifier])
// mysql_list_dbs() will return a result pointer containing the databases available from the
// current mysql daemon. Use the mysql_tablename() function to traverse this result pointer,
// or any function for result tables, such as mysql_fetch_array().
return mysql_list_dbs();
}
function list_fields($database,$table)
{
// resource mysql_list_fields ( string database_name, string table_name [, resource link_identifier])
// mysql_list_fields() retrieves information about the given table name. Arguments are the
// database and the table name. A result pointer is returned which can be used with
// mysql_field_flags(), mysql_field_len(), mysql_field_name(), and mysql_field_type().
return mysql_list_fields($database,$table);
}
function list_processes()
{
// resource mysql_list_processes ( [resource link_identifier])
// mysql_list_processes() returns a result pointer describing the current server threads.
return mysql_list_processes();
}
function list_tables($database)
{
// resource mysql_list_tables ( string database [, resource link_identifier])
// mysql_list_tables() takes a database name and returns a result pointer much like the
// mysql_query() function. Use the mysql_tablename() function to traverse this result
// pointer, or any function for result tables, such as mysql_fetch_array().
return mysql_list_tables($database);
}
function num_fields($resource_result)
{
// int mysql_num_fields ( resource result)
// mysql_num_fields() returns the number of fields in the result set result.
return mysql_num_fields($resource_result);
}
function num_rows($resource_result)
{
// int mysql_num_rows ( resource result)
// mysql_num_rows() returns the number of rows in a result set. This command is only valid
// for SELECT statements. To retrieve the number of rows affected by a INSERT, UPDATE or
// DELETE query, use mysql_affected_rows().
return mysql_num_rows($resource_result);
}
function pconnect($server,$user,$password,$client_flags=NULL)
{
// resource mysql_pconnect ( [string server [, string username [, string password [, int client_flags]]]])
// Returns a positive MySQL persistent link identifier on success, or FALSE on error.
return mysql_pconnect($server,$user,$password,$client_flags);
}
function ping($resoure_link)
{
// bool mysql_ping ( [resource link_identifier])
// mysql_ping() checks whether or not the connection to the server is working. If it has
// gone down, an automatic reconnection is attempted. This function can be used by scripts
// that remain idle for a long while, to check whether or not the server has closed the
// connection and reconnect if necessary. mysql_ping() returns TRUE if the connection to the
// server is working, otherwise FALSE.
return mysql_ping($resoure_link);
}
function result($resource_result,$row=0,$field=0)
{
// mixed mysql_result ( resource result, int row [, mixed field])
// mysql_result() returns the contents of one cell from a MySQL result set. The field
// argument can be the field's offset, or the field's name, or the field's table dot
// field name (tablename.fieldname). If the column name has been aliased ('select foo as
// bar from...'), use the alias instead of the column name.
return @mysql_result($resource_result,$row,$field);
}
function select_db($database)
{
// bool mysql_select_db ( string database_name [, resource link_identifier])
// Returns TRUE on success or FALSE on failure.
return mysql_select_db($database);
}
function db_stat()
{
// string mysql_stat ( [resource link_identifier])
// mysql_stat() returns the current server status.
// Note: mysql_stat() currently only returns status for uptime, threads, queries,
// open tables, flush tables and queries per second. For a complete list of other status
// variables you have to use the SHOW STATUS SQL command.
return mysql_stat();
}
function tablename($resource_result,$index)
{
// string mysql_tablename ( resource result, int i)
// mysql_tablename() takes a result pointer returned by the mysql_list_tables() function as
// well as an integer index and returns the name of a table. The mysql_num_rows() function may
// be used to determine the number of tables in the result pointer. Use the mysql_tablename()
// function to traverse this result pointer, or any function for result tables, such as
// mysql_fetch_array().
return mysql_tablename($resource_result,$index);
}
function thread_id()
{
// int mysql_thread_id ( [resource link_identifier])
// mysql_thread_id() returns the current thread ID. If the connection is lost and you
// reconnect with mysql_ping(), the thread ID will change. This means you should not get the
// thread ID and store it for later. You should get it when you need it.
return mysql_thread_id();
}
function unbuffered_query($string)
{
// resource mysql_unbuffered_query ( string query [, resource link_identifier])
// mysql_unbuffered_query() sends a SQL query query to MySQL, without fetching and buffering
// the result rows automatically, as mysql_query() does. On the one hand, this saves a
// considerable amount of memory with SQL queries that produce large result sets. On the other
// hand, you can start working on the result set immediately after the first row has been
// retrieved: you don't have to wait until the complete SQL query has been performed. When
// using multiple DB-connects, you have to specify the optional parameter link_identifier.
return mysql_unbuffered_query($string);
}