PHP实现MSSQL数据导入到MySQL的方法
在Web开发中,常见需要将旧系统的Microsoft SQL Server (MSSQL)数据迁移到基于PHP的新系统中的MySQL数据库。本文将展示如何使用PHP编写脚本,通过建立双重数据库连接,遍历MSSQL数据集并将记录逐条或批量插入到MySQL中。
迁移准备与核心逻辑
实现数据迁移的核心思路是:PHP同时作为MSSQL的客户端和MySQL的客户端。首先连接到源数据库(MSSQL)获取数据,然后连接到目标数据库(MySQL)执行写入操作。由于涉及的模块较为老旧,请确保你的PHP环境已启用 mssql 和 mysql 扩展(注:现代PHP通常建议使用PDO_MSQL和PDO_MYSQL替换上述废弃函数)。
方法一:逐行读写插入
这种方法逻辑清晰,适合数据量适中或需要进行字段映射的场景。通过 mssql_fetch_object 获取每一行数据,并在循环内部连接MySQL执行INSERT语句。
第1步:配置MSSQL源数据库连接参数
定义源数据库的主机、账号、密码及库名。
$hostname = "127.0.0.1"; // MSSQL服务器IP或名称
$dbuser = "sa"; // MSSQL登录账号
$dbpasswd = "sa"; // MSSQL登录密码
$dbname = "aa"; // 源数据库名
第2步:连接MSSQL并执行查询
使用 mssql_connect 建立连接,并通过 mssql_query 获取数据集合。假设要查询名为 Sheet1$ 的表:
$conn_mssql = mssql_connect($hostname, $dbuser, $dbpasswd);
mssql_select_db($dbname);
$sql_ms = "SELECT * FROM Sheet1$";
$data = mssql_query($sql_ms);
第3步:循环读取并导入MySQL
在while循环中,先配置MySQL连接(注意字符集设置),再构建INSERT语句进行插入。以下示例保留了原文中的字段结构:
while ($Arr = mssql_fetch_object($data)) {
// 提取字段值
$Airport = $Arr->Airport;
$citycode = $Arr->citycode;
$Chinesecityname = $Arr->Chinesecityname;
$Chinesecityjp = $Arr->Chinesecityjp;
$english = $Arr->english;
$countrycode = $Arr->countrycode;
$countryfullname = $Arr->countryfullname;
$Chauname = $Arr->Chauname;
// 连接MySQL目标库
$conn_mysql = mysql_connect("localhost", "root", "123456");
mysql_query("SET NAMES 'GBK'", $conn_mysql); // 确保编码一致,防止乱码
mysql_select_db("taojipiao2009", $conn_mysql);
// 构建插入语句
$sql_my = "INSERT INTO internationcode
(Airport, citycode, Chinesecityname, Chinesecityjp,
english, countrycode, countryfullname, Chauname)
VALUES ('$Airport', '$citycode', '$Chinesecityname',
'$Chinesecityjp', '$english', '$countrycode',
'$countryfullname', '$Chauname')";
mysql_query($sql_my);
}
方法二:动态列名与批量插入优化
如果不想硬编码字段名,或者希望提高写入效率,可以动态生成SQL语句并进行批量插入。此方法适用于表结构不确定或需要高性能导出的场景。
第1步:初始化变量与建立双端连接
同时连接MSSQL和MySQL,初始化用于拼接SQL的字符串变量。
$mssql_link = mssql_connect($db_host, $db_msuser, $db_mspass) or die("MSSQL连接失败");
mssql_select_db($db_msname, $mssql_link);
$mysql_link = mysql_connect($db_myhost, $db_myuser, $db_mypass) or die("MySQL连接失败" . mysql_error());
mysql_select_db($db_myname, $mysql_link);
第2步:遍历数据并构建SQL片段
使用 mssql_fetch_array 读取数据,通过foreach遍历数组自动生成列名($cols)和对应的值($vals)。
$msquery = mssql_query("SELECT TOP 1 * FROM buyok_produc", $mssql_link);
// 注意:若要全表插入,需去除 TOP 1 限制,且需注意内存占用,建议分批处理
// 此处演示仅为了展示逻辑,实际大表导出不应一次性加载所有数据到内存
$row = mssql_fetch_array($msquery, $mssql_link);
$vars = ''; $vals = ''; $cols = '';
foreach ($row as $key => $values) {
$cols .= ($cols == '' ? $key : ',' . $key);
// 简单包裹单引号处理,实际项目需对特殊字符转义
$vals .= ($vals == '' ? "'" . $values . "'" : ", '" . $values . "'");
}
$vars = '(' . $vals . ')';
第3步:组装完整SQL并执行
将列名和值组合成INSERT语句,发送至MySQL执行。
$sql = "INSERT INTO buyok_produc ($cols) VALUES $vars";
echo $sql;
$result = mysql_query($sql, $mysql_link);
if ($result) {
echo "Successfully inserted.";
} else {
echo "Failed.";
}
以上就是利用PHP实现MSSQL数据导入到MySQL的详细方法。更多关于PHP数据库操作及数据迁移的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













