📜  php 将 dbf 转换为 mysql - PHP (1)

📅  最后修改于: 2023-12-03 15:03:41.981000             🧑  作者: Mango

PHP将DBF转化为MySQL

在Web开发中,将本地数据文件转化为MySQL数据库格式是非常常见的需求,其中之一就是将dBase文件(DBF)转化为MySQL。

DBF是什么

dBASE文件(DBF)是FoxPro,Visual FoxPro,dBASE和其他数据库应用程序使用的一种文件格式。它是一种二进制文件格式,它使用某些特定的行为方式来存储数据。

转化为MySQL

开发人员可以使用PHP将DBF文件转化为MySQL。 下面是PHP代码片段显示如何转换DBF文件并将其插入到MySQL.

<?php
// 读取DBF文件
function dbf_open($file_name){
   $fdbf = fopen($file_name,'r');
   $dbf = array();
   // 获取行头的信息(都是字节数)
   $header = fread($fdbf,32);
   $header = unpack( "VRecordCount/vFirstRecord/vRecordLength", substr($header,4,8));
   $goon = true;
   $unpackString='';
   // 读取字段信息
   while ($goon && !feof($fdbf)) { // feof判断是否到了末尾
      $field = fread($fdbf,32);
      if (substr($field,0,1) == chr(13)) {
         $goon = false;
      }
      else {
         $fld = unpack( "a11fieldname/A1fieldtype/Voffset/Cfieldlen/Cfielddec",
         substr($field,0,18));
         $fld ['fieldname'] =trim($fld ['fieldname']);
         $unpackString.= "A".$fld['fieldlen'].$fld['fieldname']."/";
         $dbf []= $fld;
      }
   }
   // 读取记录信息
   fseek($fdbf, $header['FirstRecord']+1);
   $rows = array();
   $index = 0;
   while (!feof($fdbf)) {
      $row = fread($fdbf,$header['RecordLength']);
      if (substr($row,0,1) != ' ') {
         break;
      }
      $row = unpack($unpackString, $row);
      $rows [$index ++]= array_combine(array_keys($row),$row);
   }
   // 关闭文件
   fclose($fdbf);
   return array($dbf,$rows);
}
// 将DBF文件导入到MySQL数据库
function dbf_to_mysql($file_name, $table, $database, $db_host, $db_user, $db_password){
   list($structure, $dbf_data) = dbf_open($file_name);
   // 创建连接
   $link = mysql_connect($db_host, $db_user, $db_password);
   // 判断连接是否成功
   if (!$link) {
       die('Could not connect: '.mysql_error());
   }
   // 切换到所需的数据库
   $db_selected = mysql_select_db($database, $link);
   // 判断是否成功
   if (!$db_selected) {
       die ('Can\'t use '.$database.' : '.mysql_error());
   }
   // 生成column名
   $columnString = '';
   foreach ($structure as $i => $field) {
       $columnString .= strtoupper(trim($field['fieldname'])).',';
   }
   $columnString = substr($columnString,0,-1);
   // 创建MySQL表,以及插入数据
   foreach($dbf_data as $i=>$data){
       $queryString = "INSERT INTO $table ($columnString) VALUES (";
       foreach($data as $field=>$value){
           $queryString .= "'".mysql_real_escape_string($value)."',";
       }
       $queryString = substr($queryString,0,-1);
       $queryString .= ")";
       mysql_query($queryString);
   }
   mysql_close($link);
}
?>
函数说明

dbf_open

  • 作用:获取DBF文件的结构和内容
  • 参数:$file_name (string) - DBF文件名
  • 返回:类型为数组,包含了字段结构和记录信息

dbf_to_mysql

  • 作用:将DBF文件转化为MySQL,并存储
  • 参数:
    • $file_name (string) - DBF文件名
    • $table (string) - 数据要插入的表名
    • $database (string) - MySQL数据库名
    • $db_host (string) - MySQL服务器IP地址
    • $db_user (string) - MySQL服务器用户名
    • $db_password (string) - MySQL服务器密码
  • 返回:无
使用DBF转为MySQL
<?php 
// 输入你的DBF文件名,路径和文件名连起来
$file_name   = '/path/to/dbf/file/SomeDataFile.DBF';
$table       = 'new_table';  // 你自己想设的表名  
$database    = 'test_db';   // 你自己创建的数据库名
$db_host     = 'localhost'; // MySQL服务器IP
$db_user     = 'root';      // MySQL服务器用户名
$db_password = '';          // MySQL服务器密码

dbf_to_mysql($file_name, $table, $database, $db_host, $db_user, $db_password); 
?>
总结

PHP中有很多方法可以读取和转换不同格式的数据。本文中介绍了如何使用PHP将dBase文件(DBF)转换为MySQL数据库格式。开发者们可以使用此代码段实现类似的转换需求,用于自己的项目需求。