**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
两年前关门了。
改进这个问题
我已经成功地编写了一个php文件,将csv文件转换为sql并将其写入数据库。见下表:
<?php
$conn = mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("fmd", $conn);
if (isset($_POST['submit'])) {
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file,"r");
while (($fileop = fgetcsv($handle, 100000, ",")) !== false) {
$Work_Request_Code = $fileop[0];
$Building_Code = $fileop[1];
$Floor_Code = $fileop[2];
$Room_Code = $fileop[3];
$Work_Description = $fileop[4];
$Date_Work_Requested = $fileop[5];
$Primary_Trade_Required = $fileop[6];
$Problem_Type = $fileop[7];
$Work_Request_Status = $fileop[8];
$Requested_by = $fileop[9];
$sql = mysql_query("INSERT INTO work_requests (Work_Request_Code, Building_Code, Floor_Code, Room_Code, Work_Description, Date_Work_Requested, Primary_Trade_Required, Problem_Type, Work_Request_Status, Requested_by) VALUES ('$Work_Request_Code','$Building_Code','$Floor_Code','$Room_Code','$Work_Description','$Date_Work_Requested','$Primary_Trade_Required','$Problem_Type','$Work_Request_Status','$Requested_by')");
}
if($sql){
echo "Done!";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>SQL Converter</title>
<link rel="stylesheet" type="text/css" href="">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div id="mainWrapper">
<form method="post" action="index.php" enctype="multipart/form-data">
<input type="file" name="file">
<br>
<input type="submit" name="submit" value="Submit">
</form>
</div>
</body>
</html>
问题是,我知道我的csv文件有21527条记录,但是mysql查询只遍历19020条记录。我添加了一个count变量,可以得出while循环确实在所有记录中循环的结论。
我不知道为什么会这样。
1条答案
按热度按时间inn6fuwd1#
表中可能有一个唯一的字段。乍一看,可能是
Work_Request_Code
. 因为这也是csv中的第一个字段,所以很容易检查是否有重复项。如果你有任何副本
Work_Request_Code
,它将由该命令输出。但是:您并没有逃脱您在查询中插入的字符串!你真的应该使用mysqli接口!如果由于某种原因这是不可能的,那么您至少应该更改从csv数组中获取数据的代码行,如下所示(我只对第一个元素执行此操作):
如果不转义字符串,数据中的单引号将中断查询,如果不在
mysql_query
退货false
(并且不要查看日志),所有包含单引号的查询都将被有效地跳过。尝试它可能会准确返回丢失条目的数量。