|
|
 |
mysql_fetch_field (PHP 3, PHP 4, PHP 5) mysql_fetch_field -- Get column information from a result and return as an object Descriptionobject mysql_fetch_field ( resource result [, int field_offset] )
Returns an object containing field information. This function can be used
to obtain information about fields in the provided query result.
Parameters
-
result
The result resource that
is being evaluated. This result comes from a call to
mysql_query(). - field_offset
The numerical field offset. If the field offset is not specified, the
next field that was not yet retrieved by this function is retrieved.
The field_offset starts at 0.
Return Values
Returns an object containing field information. The properties
of the object are:
name - column name
table - name of the table the column belongs to
max_length - maximum length of the column
not_null - 1 if the column cannot be NULL
primary_key - 1 if the column is a primary key
unique_key - 1 if the column is a unique key
multiple_key - 1 if the column is a non-unique key
numeric - 1 if the column is numeric
blob - 1 if the column is a BLOB
type - the type of the column
unsigned - 1 if the column is unsigned
zerofill - 1 if the column is zero-filled
Examples
Example 1. mysql_fetch_field() example |
<?php
$conn = mysql_connect('localhost:3306', 'user', 'password');
if (!$conn) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('database');
$result = mysql_query('select * from table');
if (!$result) {
die('Query failed: ' . mysql_error());
}
$i = 0;
while ($i < mysql_num_fields($result)) {
echo "Information for column $i:<br />\n";
$meta = mysql_fetch_field($result, $i);
if (!$meta) {
echo "No information available<br />\n";
}
echo "<pre>
blob: $meta->blob
max_length: $meta->max_length
multiple_key: $meta->multiple_key
name: $meta->name
not_null: $meta->not_null
numeric: $meta->numeric
primary_key: $meta->primary_key
table: $meta->table
type: $meta->type
unique_key: $meta->unique_key
unsigned: $meta->unsigned
zerofill: $meta->zerofill
</pre>";
$i++;
}
mysql_free_result($result);
?>
|
|
NotesNote: Field names returned by this function
are case-sensitive.
User Contributed Notes
mysql_fetch_field
creak at foolstep dot com
17-Jul-2003 05:26
Sorry, the last pattern doesn't work with type whithout length, so it would be better if you change it with this one :
"^([a-zA-Z]+)\(?([^\)]*)\)?$"
It's still $type[1] for the type and $type[2] for the length.
Creak
blakjak at nospam dot com
27-Mar-2003 04:18
mysql_fetch_field will fail if your result set's internal pointer has advanced past the end of the result.
So, if you use ...
$result = mysql_query("select * from person where id=1"); // returns 1 row
$row = mysql_fetch_row($result);
while($field = mysql_fetch_field){
echo $field->name;
}
... you won't see any fields. If you need to use mysql_fetch_field, you need to do it before you've iterated through all the rows in the result set.
kflam at awc dot net dot au
18-Jun-2002 10:56
#Input: the table name and the enum field
#Output: an array that stores all options of the enum field or
#false if the input field is not an enum
function getEnumOptions($table, $field) {
$finalResult = array();
if (strlen(trim($table)) < 1) return false;
$query = "show columns from $table";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
if ($field != $row["Field"]) continue;
//check if enum type
if (ereg('enum.(.*).', $row['Type'], $match)) {
$opts = explode(',', $match[1]);
foreach ($opts as $item)
$finalResult[] = substr($item, 1, strlen($item)-2);
}
else
return false;
}
return $finalResult;
}
The function could be handy when making a selection option without typing all the options items respectively.
chrisshaffer at bellsouth dot net
06-Jun-2002 01:22
Slight error in the above comment:
$fieldLen = split("','",substr(1,-1,$fieldLen));
should read:
$fieldLen = split("','",substr($fieldLen,1,-1));
oops! ;)
I did take the above code (which saved me at least two hours worth of work), and massaged it into a function:
function mysql_enum_values($tableName,$fieldName)
{
$result = mysql_query("DESCRIBE $tableName");
//then loop:
while($row = mysql_fetch_array($result))
{
//# row is mysql type, in format "int(11) unsigned zerofill"
//# or "enum('cheese','salmon')" etc.
ereg('^([^ (]+)(\((.+)\))?([ ](.+))?$',$row['Type'],$fieldTypeSplit);
//# split type up into array
$ret_fieldName = $row['Field'];
$fieldType = $fieldTypeSplit[1];// eg 'int' for integer.
$fieldFlags = $fieldTypeSplit[5]; // eg 'binary' or 'unsigned zerofill'.
$fieldLen = $fieldTypeSplit[3]; // eg 11, or 'cheese','salmon' for enum.
if (($fieldType=='enum' || $fieldType=='set') && ($ret_fieldName==$fieldName) )
{
$fieldOptions = split("','",substr($fieldLen,1,-1));
return $fieldOptions;
}
}
//if the funciton makes it this far, then it either
//did not find an enum/set field type, or it
//failed to find the the fieldname, so exit FALSE!
return FALSE;
}
The most useful thing that I can think to do with this is to populate a HTML Dropdown box with it:
echo "<SELECT NAME=\"Select\" SIZE='1'>";
foreach($fieldOptions as $tmp)
{
echo "<OPTION>$tmp";
}
Hope this helps :D
justin at quadmyre dot com
18-Apr-2002 07:00
Same problem, slightly different solution.
$result = mysql_query("DESCRIBE tablename");
# or SHOW COLUMNS FROM
# or SHOW FIELDS FROM
then loop:
$row = mysql_fetch_array($result);
# row is mysql type, in format "int(11) unsigned zerofill"
# or "enum('cheese','salmon')" etc.
ereg('^([^ (]+)(\((.+)\))?([ ](.+))?$',$row['Type'],$fieldTypeSplit);
# split type up into array
$fieldType = $fieldTypeSplit[1]; # eg 'int' for integer.
$fieldFlags = $fieldTypeSplit[5]; # eg 'binary' or 'unsigned zerofill'.
$fieldLen = $fieldTypeSplit[3]; # eg 11, or 'cheese','salmon' for enum.
You might then like to:
if ($fieldType=='enum' or $fieldType=='set')
$fieldLen = split("','",substr(1,-1,$fieldLen));
So for enum or set types, $fieldLen becomes an array of possible values.
Hope that helps someone out there...
php at brayra dot com
21-Mar-2002 06:09
I needed to get the field information and the enum/set values. Here is the function I created to expand the object returned by mysql_fetch_field. I also, decided to return all the fields for a table in an array of field objects by "name" and position much like mysql_fetch_array does.
You could test it by using:
$myfields = GetFieldInfo('test_table');
print "<pre>";
print_r($myfields);
print "</pre>";
The field objects now have 'len', 'values' and 'flags' parameters.
NOTE: 'values' only has data for set and enum fields.
//This assumes an open database connection
//I also use a constant DB_DB for current database.
function GetFieldInfo($table)
{
if($table == '') return false;
$fields = mysql_list_fields(DB_DB, $table);
if($fields){
$columns = mysql_query('show columns from ' . $table);
if($columns){
$num = mysql_num_fields($fields);
for($i=0; $i < $num; ++$i){
$column = mysql_fetch_array($columns);
$field = mysql_fetch_field($fields, $i);
$flags = mysql_field_flags($fields, $i);
if($flags == '') $flags=array();
else $flags = explode(' ',$flags);
if (ereg('enum.(.*).',$column['Type'],$match))
$field->values = explode(',',$match[1]);
if (ereg('set.(.*).',$column['Type'],$match))
$field->values = explode(',',$match[1]);
if(!$field->values) $field->values = array();
$field->flags = $flags;
$field->len = mysql_field_len($fields, $i);
$result_fields[$field->name] = $field;
$result_fields[$i] = $field;
}
mysql_free_result($columns);
}
mysql_free_result($fields);
return $result_fields;
}
return false;
}
hope someone else finds this useful.
krang at krang dot org dot uk
10-Mar-2002 08:12
The field type returns what PHP classifies the data found in the field, not how it is stored in the database; use the following example to retrieve the MySQL information about the field....
$USERNAME = '';
$PASSWORD = '';
$DATABASE = '';
$TABLE_NAME = '';
mysql_connect('localhost', $USERNAME, $PASSWORD)
or die ("Could not connect");
$result = mysql_query("SHOW FIELDS FROM $DATABASE.$TABLE_NAME");
$i = 0;
while ($row = mysql_fetch_array($result)) {
echo $row['Field'] . ' ' . $row['Type'];
}
etiennesky at hotmail dot com
14-Oct-2001 03:55
If you need the 'Default' value of a column, you can use
$meta->def
to get it as in example 1.
This has not been documented yet and can sure save others some time.
dave at techweavers dot net
04-Oct-2000 03:48
If you want to get the max length of a column not just the data use this:
$result = mysql_query ("SELECT * FROM table");
$fields = mysql_num_fields ($result);
$i = 0;
while ($i < $fields) {
$len = mysql_field_len ($result, $i);
$i++;
}
Or refer to http://www.php.net/manual/function.mysql-field-type.php
| |