如何用php将mysql表导出为dbf文件

如何用php将mysql表导出为dbf文件,第1张

<?

include_once("include.php")

$card=445//接收$card

//英文字段转中文字段

function field_conv($en,$card){

global $DbUseDatabase,$DbMHost,$DbMUser,$DbMPass

$db = new newquery($DbUseDatabase,$DbMHost,$DbMUser,$DbMPass)

$db->query("select fieldname from t_cardinfo where cardkind=$card and field ='$en'")

if($db->next_record()){

return $db->f(0)

}

else

return false

}

function mysql_to_dbf($mysql_datasource,$source_table,$destination_dbf)

{

global $DbUseDatabase,$DbMHost,$DbMUser,$DbMPass,$card

$link=mysql_connect($DbMHost,$DbMUser,$DbMPass) or exit("不能链接到数据库")

$operate=mysql_select_db($mysql_datasource,$link)

//连mysql数据源

$rs=mysql_query("SELECT * from ".$source_table." limit 0,1")

$number_of_fields=mysql_num_fields($rs)//取字段数量

//不要前面5个底层字段

for($field_counter=5$field_counter<$number_of_fields$field_counter++)

{

$dbf_field_type=mysql_field_type($rs,$field_counter)

$dbf_field_name=mysql_field_name($rs,$field_counter)

$dbf_field_len=mysql_field_len($rs,$field_counter)

//print($dbf_field_name)

if(isset($point)){

unset($point)

array_pop($field)

}

switch($dbf_field_type)

{

case "string":

$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)

//自由表的字段名不能超过10,请注意

$dbf_field_len=mysql_field_len($rs,$field_counter)

if($dbf_field_len>=255)

{

$dbf_field_len--

}

$dbf_field_type="C"

break

case "varchar":

$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)

//自由表的字段名不能超过10,请注意

$dbf_field_len=mysql_field_len($rs,$field_counter)

if($dbf_field_len>=255)

{

$dbf_field_len--

}

$dbf_field_type="C"

break

case "decimal":

$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)

//自由表的字段名不能超过10,请注意

$dbf_field_len=mysql_field_len($rs,$field_counter)

if($dbf_field_len>=255)

{

$dbf_field_len--

}

$dbf_field_type="C"

break

case "real":

$dbf_field_name=substr(mysql_field_name($rs,$field_counter),0,10)

//自由表的字段名不能超过10,请注意

$dbf_field_len=mysql_field_len($rs,$field_counter)

if($dbf_field_len>=255)

{

$dbf_field_len--

}

$dbf_field_type="N"

$dbf_field_len="10"

$point="0"

break

case "date":

$dbf_field_type="D"

break

}

$fieldname=field_conv($dbf_field_name,$card)

$fieldname=subcnstr($fieldname, 9, '')//字段最长10个字符

$field[0]=$fieldname

$field[1]=$dbf_field_type

$field[2]=$dbf_field_len

if(isset($point)) {

$field[3]=$point

}

$dbf[]=$field

}

$d = array_map(null, $dbf)

if (!dbase_create($destination_dbf,$dbf)){

print "<strong>Error!</strong>"

exit

}

//else

// print "<strong>ok!</strong>"

//写入字段名完成!

$dbfp=dbase_open ($destination_dbf,2)

$rs=mysql_query("SELECT * from ".$source_table)

$field=mysql_num_fields($rs)

while($row = mysql_fetch_array($rs))

{

$i=0

for($fieldcounter=5$fieldcounter<$field$fieldcounter++)//不要前面5个底层字段

{

$field_name=mysql_field_name($rs,$fieldcounter)

$rows[$i]=$row[$field_name]

$i++

}

dbase_add_record ($dbfp,$rows)//写入记录

}

//print_r($dbffield)

dbase_close($dbfp)

mysql_close($link)

}

mysql_to_dbf("nbw1-SY","t_cardcontent445","c:\a.dbf")

echo "<script>alert('导出完成!')</script>"

?>

你双击dbf是什么程序打开的?vfp吗?

你可以使用set printer to file abc.sql

list to print

然后使用一个文本编辑器,如emeditor,编辑这个abc.sql,将内容构造为标准的sql语句:

insert into mytable (a,b,c,d,e) values ('dbf_field1','dbf_field2','dbf_field3','dbf_field4','dbf_field5')

然后在mysql administrtor中,将这个abc.sql导入到数据库中就可以了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8721345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存