Я хочу вставить приблизительно 50 000 запросов mysql для 'вставки' в 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) файла как 1 000 за один раз и выполнить запрос 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-операций.[
].] Вместо того, чтобы загружать весь файл в память, что и делается при использовании функции [] file[], возможным решением было бы чтение его построчно, используя комбинацию из [][]fopen[
][], [][]fgets[
][] и [][]fclose[
][] - идея состояла в том, чтобы читать только то, что вам нужно, иметь дело со строками, которые у вас есть, и только потом читать следующие пару строк. [
][
]
Addditionnaly, вы, возможно, захотите взглянуть на этот ответ: [] Лучшая практика: Импорт mySQL файла в PHP; разделенные запросы[][
]Пока нет принятого ответа, но некоторые из данных ответов могут уже помочь вам...[
].] Используйте клиент командной строки, он гораздо эффективнее и должен легко обрабатывать 50K вставки:[
] [ mysql -uUser -p <db_name> < dump.sql
] ] Недавно я читал о вставке большого количества запросов в БД для быстрой работы. В статье было предложено использовать функцию []sleep()[] (или []usleep[]) для задержки на несколько секунд между запросами, чтобы не перегружать MySQL сервер.[
].