在PHP中读取文本文件

时间:2011-04-08 19:25:29

标签: php mysql database file

我的代码 -

$filename = basename($_FILES['file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext=="txt")
&& ($_FILES["file"]["size"] < 2000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {$newname = 'news/'.$filename;
     move_uploaded_file($_FILES['file']['tmp_name'],$newname);
     $fileread = $newname;
    //reading a file
$file = fopen($fileread, "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
  {
      //inserting each data into table
      $insert = "insert into $name (serial,data,used) values('','fgets($file)','0')";
      $query = mysqli_query($connect,$insert);
      if($query)
      {
          echo "cool";
      }
  }

因此用户上传包含每行数据的文本文件。我想将数据插入数据库,直到执行查询。

什么是插入到db中的是fgets(资源ID#6) - 这一直持续到我停止。,...它是不受控制的......

3 个答案:

答案 0 :(得分:2)

  $insert = "insert into $name (serial,data,used) values('','fgets($file)','0')";

您正在将文字文本fgets($file)插入数据库,因为它嵌入在父字符串中。你想要这样的东西,它也会(顺便说一句)删除sql注入漏洞:

 $string = fgets($file);
 $string = mysql_real_escape_string($string);
 $insert = "insert into ... values ( ..., '$string', ...)";

为什么逃避它?我不知道该文本文件中有什么内容,但是如果任何文本包含多个单引号,则会导致该特定插入失败并出现SQL语法错误,现在您有一个缺失的行数据库。

答案 1 :(得分:0)

你需要从单引号中取出fgets调用,这使它成为一个字符串。

答案 2 :(得分:0)

无法在字符串中标识函数,因此将其解释为原始文本。

我建议:

//inserting each data into table
$data = fgets($file);
$insert = "insert into $name (serial,data,used) values('', {$data}, '0')";