我想在 mysql 数据库中为“插入”插入大约 50,000 个 mysql 查询, 为此,我有 2 个选择,
1-直接导入(.sql)文件: 出现以下错误 “您可能尝试上传过大的文件。请参阅文档以了解解决此限制的方法。”
2- 使用 php 代码以来自 (.sql) 文件的不同 block 的形式插入这些查询。 这是我的代码:
<?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 语句的小块(一行)。
关于php - 在 MySQL 数据库上导入大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2011253/