Рассмотрим задачу — необходимо содержимое текстового файла strings.txt загрузить в базу данных построчно, т.е. одна строка = одна запись в базе. База «data» содержит в себе таблицу, «strings», которая состоит из двух полей: уникальный ключ «id» и непосредственно содержимое «string».
Стоит обратить внимание на то, чтобы база и текстовый файл имели одинаковую кодировку. В случае примера — utf8. При необходимости один из них надо конвертировать, чтобы привести к соответствию.
Использованные функции:
fgets — чтение строки из файла
string fgets ( resource handle [, int length] )
Возвращает строку размером в length — 1 байт, прочитанную из дескриптора файла, на который указывает параметр handle. Чтение заканчивается, когда количество прочитанных байтов достигает length — 1, по достижении конца строки (который включается в возвращаемое значение) или по достижении конца файла (что бы ни встретилось первым). Если длина не указана, по умолчанию ее значение равно 1 килобайту или 1024 байтам. Параметр length стал необязательным, начиная с PHP версии 4.2.0. Если этот параметр опущен, длина строки принимается за 1024. С версии PHP 4.3, отсутствие параметра length будет приводить к чтению потока до конца строки. Если длина большинства строк в файле превышает 8 килобайт, наиболее эффективным решением в отношении ресурсов, используемых скриптом, будет указание максимальной длины строки.
mysql_escape_string — экранирование SQL спец-символы для использования в mysql_query
string mysql_escape_string ( string unescaped_string )
Функция экранирует все спец-символы в unescaped_string, вследствие чего её можно безопасно использовать в mysql_query(). При этом mysql_escape_string() не экраинрует % и _.
<?php
//Подключаемся к базе с логином и паролем, принудительно задаем кодировку операций.
$db = mysql_connect ("localhost","user","password");
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
mysql_select_db ("data",$db) or die("Database Error: ".mysql_error());
//Предполагается, что файл strings.txt, который надо разобрать, лежит в той же папке, что и скрипт.
$fp = fopen("./strings.txt", "r");
// Открываем файл в режиме чтения
if ($fp)
{
while (!feof($fp))
{ //Считываем файл построчно в переменную stringtext
$stringtext = fgets($fp);
if (!empty($stringtext ))
{
//Если строка считалась, заносим ее в базу. Первый параметр NULL, так как база берет на себя его заполнение с последовательным увеличением.
$query = "INSERT INTO strings (id,string) VALUES ('NULL','".mysql_escape_string($stringtext)."')";
mysql_query($query) or die(mysql_error());
}
}
}
else echo "Ошибка при открытии файла";
fclose($fp);
?>