首页  >  文章  >  数据库  >  如何使用 PHP 将大型 MySQL 文件导入共享托管环境?

如何使用 PHP 将大型 MySQL 文件导入共享托管环境?

Linda Hamilton
Linda Hamilton原创
2024-10-31 11:30:17908浏览

How to Import Large MySQL Files into a Shared Hosting Environment Using PHP?

在 PHP 中优化 MySQL 数据库导入:可靠地拆分查询

在 Web 开发领域,会出现更新共享服务器上托管的网站的情况需要更新数据库。然而,无法从外部访问MySQL带来了挑战。为了解决这个问题,需要通过 PHP 导入 MySQL 文件。本文探讨了一种有效的解决方案,将大型 MySQL 数据库文件拆分为单独的查询并使用 PHP 导入它们。

问题陈述

目标是开发一种可靠的方法将大型数据库文件拆分为单独的查询,而无需同时打开整个文件。限制包括 MySQL 命令行函数、LOAD DATA INFILE、phpMyAdmin 和 mysqli_multi_query() 不可用。

解决方案:SplitSQL 函数

解决方案在于内存- 称为 SplitSQL 的友好函数,它逐行迭代文件并识别查询分隔符。它将行累积到数组中,直到遇到分隔符,形成完整的查询。然后该函数执行查询并提供有关其成功或失败的反馈。

实现

<code class="php">function SplitSQL($file, $delimiter = ';')
{
    set_time_limit(0);

    if (is_file($file) === true)
    {
        $file = fopen($file, 'r');

        if (is_resource($file) === true)
        {
            $query = array();

            while (feof($file) === false)
            {
                $query[] = fgets($file);

                if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query)) === 1)
                {
                    $query = trim(implode('', $query));

                    if (mysql_query($query) === false)
                    {
                        echo '<h3>ERROR: ' . $query . '</h3>' . "\n";
                    }

                    else
                    {
                        echo '<h3>SUCCESS: ' . $query . '</h3>' . "\n";
                    }

                    while (ob_get_level() > 0)
                    {
                        ob_end_flush();
                    }

                    flush();
                }

                if (is_string($query) === true)
                {
                    $query = array();
                }
            }

            return fclose($file);
        }
    }

    return false;
}</code>

测试和输出

使用大型 phpMyAdmin SQL 转储进行测试后,SplitSQL 函数产生了成功的结果。输入输出示例如下:

测试数据

<code class="sql">CREATE TABLE IF NOT EXISTS "test" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT,
    "name" TEXT,
    "description" TEXT
);

BEGIN;
    INSERT INTO "test" ("name", "description")
    VALUES (";;;", "something for you mind; body; soul");
COMMIT;

UPDATE "test"
    SET "name" = "; "
    WHERE "id" = 1;</code>

输出

SUCCESS: CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT );
SUCCESS: BEGIN;
SUCCESS: INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul");
SUCCESS: COMMIT;
SUCCESS: UPDATE "test" SET "name" = "; " WHERE "id" = 1;

结论

SplitSQL 函数提供了一个可靠的解决方案,用于将大型 MySQL 数据库文件拆分为单独的查询并使用 PHP 执行它们。它有效地解决了上述限制并实现了数据库更新的自动导入。这种方法可确保共享托管环境中的无缝数据库维护。

以上是如何使用 PHP 将大型 MySQL 文件导入共享托管环境?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn