我的代码-
$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";
}
}
所以用户上传的文本文件每行包含数据。我想把数据插入到数据库中,直到查询执行完毕。
插入到数据库的是fgets(资源id #6) -这一直持续到我停止。
$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语法错误,现在你已经在数据库中丢失了一行。
您需要将fgets调用从单引号中取出,使其成为字符串
该函数无法在字符串中识别,因此被解释为原始文本。
我建议:
//inserting each data into table
$data = fgets($file);
$insert = "insert into $name (serial,data,used) values('', {$data}, '0')";