微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在MySQL DB上导入大文件

我想在 mysql db中为’insert’插入大约50,000个mySQL查询,
为此,我有2个选项,

1-直接导入(.sql)文件
发生以下错误
“您可能尝试上传过大的文件.请参阅文档以了解解决此限制的方法.”

2-使用PHP代码以(.sql)文件的不同块的形式插入这些查询.
这是我的代码

<?PHP

// Configure DB
include "config.PHP";

// Get file data
$file = file('country.txt'); 

// Set pointers & position variables
$position = 0;
$eof = 0; 

while ($eof < sizeof($file))
{
    for ($i = $position; $i < ($position + 2); $i++)
    {
        if ($i < sizeof($file))
        {
            $flag = MysqL_query($file[$i]);

            if (isset($flag))
            {
                echo "Insert Successfully<br />";
                $position++;
            }

            else
            {
                echo MysqL_error() . "<br>\n";
            }
        }

        else
        {
            echo "<br />End of File";
            break;
        }
    }

    $eof++;
}

?>

但是会发生内存大小错误,但是我将内存限制从128M扩展到256M甚至512M.

然后我认为,如果我能够一次从(.sql)文件加载有限的行,如1000,并执行mySQL查询,那么它可能导入从文件数据库的所有记录.
在这里我不知道如何处理文件开始位置结束,如何更新开始和结束位置,以便它不会从.sql文件获取以前获取的行.

这是你需要的代码,现在已经美化了! = d
<?PHP

include('config.PHP');

$file = @fopen('country.txt','r');

if ($file)
{
    while (!feof($file))
    {
        $line = trim(fgets($file));
        $flag = MysqL_query($line);

        if (isset($flag))
        {
            echo 'Insert Successfully<br />';
        }

        else
        {
            echo MysqL_error() . '<br/>';
        }

        flush();
    }

    fclose($file);
}

echo '<br />End of File';

?>

基本上它是一个不那么贪婪的代码版本,而不是在内存中打开整个文件,它读取并执行sql语句的小块(一个衬里).

原文地址:https://www.jb51.cc/php/136226.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐