- IT Blog. Code Inside - https://code-inside.com -

Полезные функции PHP: Построчная запись текстового файла в MySQL базу

php иконка

Рассмотрим задачу — необходимо содержимое текстового файла 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); 
?>