PHP实现MSSQL数据导入到MySQL的方法

林舟
林舟
发布时间:2026-10-14| 6人浏览过
原创

在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);
}
[!WARNING] 上述代码使用的 mssql_* 和 mysql_* 函数在 PHP 7.0+ 中已被移除。实际生产环境中请使用 PDO 或 mysqli 驱动,并注意防范SQL注入风险(如使用预处理语句)。]

方法二:动态列名与批量插入优化

如果不想硬编码字段名,或者希望提高写入效率,可以动态生成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数据库操作及数据迁移的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。