mysql field flags_mysql_field_flags

用户评论:

[#1]

play at arcadevillage dot com [2009-08-03 07:07:12]

To really backup the database values, I made a little changement :

My code really looks like bomas 's code, but there is an important diffence :

$nbc=mysql_num_fields($req_table);

while ($ligne=mysql_fetch_array($req_table))

{$insertions="INSERT INTO$tableVALUES(";

for ($i=0;$i

{

if ($i>0)$insertions.=", ";

if ( !isset($ligne[$i]))$insertions.="NULL";

else$insertions.="'".mysql_real_escape_string($ligne[$i])."'";

}$insertions.=");";$dumpsql[] =$insertions;

}?>

$dumpslq is the variable where I put the insertion orders before writting them in a text file.

Before, I test that the values if not NULL into the field because it is the only way to make the difference, for example for string text fields, between NULL values and empty strings.

If you don't make this test, you should find empty string instead of NULL values when you do the backup.

[#2]

bomas at cities-of-faith dot com [2005-09-08 01:52:43]

well, to make a complete backup of your database, i suggest this code:

//open database here

$tab_status = mysql_query("SHOW TABLE STATUS");

while($all = mysql_fetch_assoc($tab_status)):

$tbl_stat[$all[Name]] = $all[Auto_increment];

endwhile;

unset($backup);

$tables = mysql_list_tables('cofadmin');

while($tabs = mysql_fetch_row($tables)):

$backup .= "--\n--Tabel structuur voor `$tabs[0]`\n--\n\nDROP IF EXISTS TABLE `$tabs[0]`\nCREATE TABLE IF NOT EXISTS `$tabs[0]` ( ";

$res = mysql_query("SHOW CREATE TABLE $tabs[0]");

while($all = mysql_fetch_assoc($res)):

$str = str_replace("CREATE TABLE `$tabs[0]` (", "", $all['Create Table']);

$str = str_replace(",", ", ", $str);

$str2 = str_replace("`) ) TYPE=MyISAM ", "`)\n ) TYPE=MyISAM ", $str);

$backup .= $str2." AUTO_INCREMENT=".$tbl_stat[$tabs[0]].";\n\n";

endwhile;

$backup .= "--\n--Gegevens worden uitgevoerd voor tabel `$tabs[0]`\n--\n\n";

$data = mysql_query("SELECT * FROM $tabs[0]");

while($dt = mysql_fetch_row($data)):

$backup .= "INSERT INTO `$tabs[0]` VALUES('$dt[0]'";

for($i=1; $i

$backup .= ", '$dt[$i]'";

endfor;

$backup .= ");\n";

endwhile;

$backup .= "\n-- --------------------------------------------------------\n\n";

endwhile;

echo $backup;

this displayes your data the same way as phpmyadmin does.

hope it helps some of you guys

Greetz

[#3]

pike-php at kw dot nl [2005-07-14 16:55:40]

ok, sorry for the code bloat :) but this is how I

get the full power of mysql's DESCRIBE table statement, in

an associative array, including defaults, enum values, float radix et all.

it assumes mysql returns the type as

"type[(arg[,arg..])] [ add]"

like

"float(20,6) unsigned"

"enum('yes','no')"

etc

while ($row_fieldsquery=mysql_fetch_assoc($result_fieldsquery)) {$name=$row_fieldsquery['Field'];$fields[$name] = array();$fields[$name]["type"]         ="";$fields[$name]["args"]         = array();$fields[$name]["add"]          ="";$fields[$name]["null"]        =$row_fieldsquery['Null'];$fields[$name]["key"]        =$row_fieldsquery['Key'];$fields[$name]["default"]    =$row_fieldsquery['Default'];$fields[$name]["extra"]        =$row_fieldsquery['Extra'];$fulltype=$row_fieldsquery['Type'];$typeregs= array();

if (preg_match($fullmatch,$fulltype,$typeregs)) {$fields[$name]["type"] =$typeregs[1];

if ($typeregs[4])$fields[$name]["add"] =$typeregs[4];$fullargs=$typeregs[2];$argsreg= array();

if (preg_match_all($charlistmatch,$fullargs,$argsreg)) {$fields[$name]["args"] =$argsreg[1];

} else {$argsreg= array();

if (preg_match_all($numlistmatch,$fullargs,$argsreg)) {$fields[$name]["args"] =$argsreg[1];

} else die("cant parse type args:$fullargs");

}

} else die("cant parse type:$fulltype");

}

return$fields;

}?>

[#4]

buttrose at unimelb dot edu dot au [2004-10-20 19:26:52]

This function is essential for writing a generic table editor (ie one that just takes the name of the table and works out what fields it has, types, sizes etc.). Unfortunately, I am using psotgreSQL not mySql. Postgres has field_type and field_size functions  but not as far as I can tell an equivalent of the mysql_field_flags() function. Without it, there is no way I can do generic ADDs and INSERTs.

Anyone know a workaround to get this information (eg is the field a primary key? Can it be NULL? Is it auto_increment?) in Postgres?

Cheers

Rob Buttrose

[#5]

amir at scrounch dot com [2003-08-17 10:39:38]

returns primary keys of a table using 'show keys'

although it is possible to use desc, show keys offers possible enhancements such a getting sequence in index along with it

function getPrimaryKeyOf($table, $link) {

$pk = Array();

$sql = 'SHOW KEYS FROM `'.$table.'`';

$res = mysql_query($table, $link) or die(mysql_error());

while ($row = mysql_fetch_assoc($res)) {

if ($row['Key_name']=='PRIMARY')

array_push($pk, $row['Column_name']);

}

return $pk;

}

[#6]

simone dot t at betisgroup dot com [2003-04-10 04:20:32]

Another examples :

####################################

function field_keys($host, $user, $password, $database, $field ) {

$db_link = mysql_connect($host, $user, $password) or die ("error connect");

mysql_select_db($database,$db_link);

$query="DESC $field";

$results=mysql_query($query);

$i=0;

while ($row=mysql_fetch_array($results)) {

if ($row[Key]=="PRI") {

$array_keys[$i]=$row[Field];

}

$i++;

}

return $array_keys;

}

####################################

//Example of Main...

$tmp = field_keys("localhost", "myuser", "mypassword", "mydb", "field_name" );

// ...loop through array...

foreach ( $tmp as $array_tmp){

print "
";

print $array_tmp;

print "
";

}

[#7]

justin DOT flavin AT ntlworld DOT com [2002-12-06 10:36:20]

Sometimes, when writing a generic function or class, you want your script to be able to determine what the primary key of a table is.

$query="DESC UsersTable";

$results=mysql_query($query);

while ($row=mysql_fetch_array($results))

{

if ($row[Type]="PRI")

{

print "I found the primary key! 
";

$UserKey=$row[Field];

print $row[Field];

exit;

}

}

..... later on we might have something like

print " Users Name ";

What's also interesting is the useful data you can get from

a DESC query.

The following prints out the array values grabbed by mysql_fetch_array on a DESC query - VERY useful stuff!!!

$query="DESC UsersTable";

$results=mysql_query($query);

while ($row=mysql_fetch_array($results))

{

print "

";

print_r ($row);

print "";

}

[#8]

jakemsr at jakemsr dot com [2002-10-31 00:32:45]

I didn't find anything to get the valid values for

ENUM or SET column types, so I came up with the

following

function mysql_enum_values($table, $field)

{

$sql = "SHOW COLUMNS FROM $table LIKE '$field'";

$sql_res = mysql_query($sql)

or die("Could not query:\n$sql");

$row = mysql_fetch_assoc($sql_res);

mysql_free_result($sql_res);

return(explode("','",

preg_replace("/.*\('(.*)'\)/", "\\1",

$row["Type"])));

}

[#9]

cufarley at nirvanet dot net [2001-07-11 05:36:53]

Using the "DESC TableName" command may also do the trick and is a bit shorter.

[#10]

jurgen at alienguitar dot com [2001-06-10 16:50:00]

The previous problem to get the default values of a column:

Use the following query and parse the 'Default' column:

"SHOW COLUMNS FROM TableName"

or for a single entry:

"SHOW COLUMNS FROM TableName LIKE 'column'"

It will give you also values for Type,  Null, Key and Extra (check with mysql program first, so you see what you get ;-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值