Member 13875735 Ответов: 3

Импортируйте txt в mysql, почему мой скрипт не работает ?


Hi!Please help me to fix this, why my script is not working on php7?


Что я уже пробовал:

<?
include ('sqlbase.php');

$file_handle = fopen("keys.txt", "r");
while (!feof($file_handle)) 
{
$line = fgets($file_handle);
$line = trim($line);

$sql = "INSERT INTO `content` 
		   SET
                       `keyword`=\'$line\'";

					   
  $result = mysqli_query($sql) 
      or die('Query error: <code>'.$sql.'<br>'.mysqli_error().'</code>');
}

?>

0x01AA

Взгляните сюда, кажется, все гораздо проще: Импорт CSV - данных с помощью PHP/MySQL- Stack Overflow[^]

3 Ответов

Рейтинг:
2

Jochen Arndt

Вы не сказали нам, что не работает.

Но если PHP код вообще не выполняется то это вероятно связано с использованием короткого открытого тега <? что не рекомендуется, так как требуется включить его с помощью PHP: описание основных директив php.ini: short_open_tag - Manual[^].

Поэтому либо включите эту опцию, либо (лучше) используйте длинный открытый тег <?php.


Рейтинг:
2

Mohibur Rashid

Позвольте мне судить о вашем кодексе.

<?
// does sqlbase.php connect with db?
// if it does what is the variable name for database handle?
// have you selected a database?
include ('sqlbase.php'); // may be you should use include_once in this particular case

$file_handle = fopen("keys.txt", "r");
while (!feof($file_handle)) 
{
$line = fgets($file_handle);
$line = trim($line);

$sql = "INSERT INTO `content` SET `keyword`=\'$line\'"; // you are escaping Single Quote, unnecessary. What would happen if $line has a single quote in it?
// the following query is not good
// INSERT INTO `content` SET `kewyword` = 'word with 'quote';

// This 
	   
  $result = mysqli_query($sql) // reference clearly says you need to pass database handl
      or die('Query error: <code>'.$sql.'<br>'.mysqli_error().'</code>');
}

?>



Следуйте стилю процедуры: РНР: в mysqli::запрос - руководство по эксплуатации[^]


Рейтинг:
1

Patrice T

Вы уверены, что все одинарные кавычки повсюду тоже выглядят странно. Вы должны проверить синтаксис SQL.

$sql = "INSERT INTO `content` SET `keyword`=\'$line\'";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]