将CSV文件导入MYSQL时出错:错误号1136-错误值\u行上的计数\u
我不熟悉Node和Ajax,所以请耐心听我说。我正在尝试将csv文件导入MySQL表。我已经设法拼凑了一些教程,我想我可能把这条路线上的某个地方搞砸了。非常感谢您的帮助将CSV文件导入MYSQL时出错:错误号1136-错误值\u行上的计数\u,mysql,node.js,ajax,csv,express,Mysql,Node.js,Ajax,Csv,Express,我不熟悉Node和Ajax,所以请耐心听我说。我正在尝试将csv文件导入MySQL表。我已经设法拼凑了一些教程,我想我可能把这条路线上的某个地方搞砸了。非常感谢您的帮助 <head> {{>headLinks}} </head> <body> <div class="main-content"> {{>profile_header}} <div>{{{message}}}</div>
<head>
{{>headLinks}}
</head>
<body>
<div class="main-content">
{{>profile_header}}
<div>{{{message}}}</div>
<input type="file" name="myfile" id="myfile">
</div>
{{>footer}}
<script>
$('#myfile').change(function(e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('myfile', file);
$.ajax({
url: './csv',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function() {
window.location = './dashboard'
},
crossDomain: true
});
});
</script>
</body>
</html>
我已成功读取了csv文件并记录了内容的输出,但一旦我尝试将记录插入到我的表中,就会出现以下错误:
<head>
{{>headLinks}}
</head>
<body>
<div class="main-content">
{{>profile_header}}
<div>{{{message}}}</div>
<input type="file" name="myfile" id="myfile">
</div>
{{>footer}}
<script>
$('#myfile').change(function(e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('myfile', file);
$.ajax({
url: './csv',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function() {
window.location = './dashboard'
},
crossDomain: true
});
});
</script>
</body>
</html>
<head>
{{>headLinks}}
</head>
<body>
<div class="main-content">
{{>profile_header}}
<div>{{{message}}}</div>
<input type="file" name="myfile" id="myfile">
</div>
{{>footer}}
<script>
$('#myfile').change(function(e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('myfile', file);
$.ajax({
url: './csv',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function() {
window.location = './dashboard'
},
crossDomain: true
});
});
</script>
</body>
</html>
这是我的把手模板:
<head>
{{>headLinks}}
</head>
<body>
<div class="main-content">
{{>profile_header}}
<div>{{{message}}}</div>
<input type="file" name="myfile" id="myfile">
</div>
{{>footer}}
<script>
$('#myfile').change(function(e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('myfile', file);
$.ajax({
url: './csv',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function() {
window.location = './dashboard'
},
crossDomain: true
});
});
</script>
</body>
</html>
这是我的import.js文件
<head>
{{>headLinks}}
</head>
<body>
<div class="main-content">
{{>profile_header}}
<div>{{{message}}}</div>
<input type="file" name="myfile" id="myfile">
</div>
{{>footer}}
<script>
$('#myfile').change(function(e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('myfile', file);
$.ajax({
url: './csv',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function() {
window.location = './dashboard'
},
crossDomain: true
});
});
</script>
</body>
</html>
const handleImport = (req, res, csv, conn, name, fs) => {
const file = req.file;
const eventId = req.params.eid ;
const queryColumns = "SELECT * FROM events WHERE eid = ?"
conn.query(queryColumns, [eventId], (err, cols, fields) => {
console.log(cols[0].event_name + " - " + eventId);
if (err) {
console.log(err)
req.flash('alert', '<div class="alert alert-danger" role="alert">Unable to access this event, please try again.</div>');
res.redirect('/profile');
} else {
const table = cols[0].table_name;
const columns = cols[0].columns;
const col_array = JSON.parse(columns.split("'").join('"'));
const custom1 = col_array[8];
const custom2 = col_array[9];
const custom3 = col_array[10];
fs.createReadStream(file.path).pipe(csv()).on('data', (data) => {
console.log(data.length);
const values = [];
values.push(JSON.stringify(data));
const addQuery = "INSERT INTO " + table + " (TotalGuests , AlertMessage , FirstName , LastName , Company , Email , Phone , " + custom1 + ", " + custom2 + ", " + custom3 + ") VALUES( ?)"
conn.query(addQuery, [values], (err, results, fields) => {
if (err || results.length === 0) {
console.log(err);
res.render('event_add', {
title: 'Add Event',
alert: '<div class="alert alert-danger" role="alert">Unable to create event. Please try again later or <a href="/contact">contact us</a>for assistance</div>',
name
})
return
}
req.flash('alert', '<div class="alert alert-success" role="alert">Import completed</div>')
})
});
}
});
}
module.exports = {
handleImport
};
您没有为insert正确绑定值。实际上,您的代码为insert绑定了一个唯一的值,该值表示为(stringized)数组。换句话说,您告诉数据库插入一个包含10列的记录,但只为第一列提供一个值
<head>
{{>headLinks}}
</head>
<body>
<div class="main-content">
{{>profile_header}}
<div>{{{message}}}</div>
<input type="file" name="myfile" id="myfile">
</div>
{{>footer}}
<script>
$('#myfile').change(function(e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('myfile', file);
$.ajax({
url: './csv',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function() {
window.location = './dashboard'
},
crossDomain: true
});
});
</script>
</body>
</html>
"INSERT INTO " + table + " (TotalGuests , AlertMessage , FirstName ... ) VALUES(?)"
您需要重写查询以绑定每列一个值(因此基本上需要10个问号),并相应地传递10个单独的值以进行插入。我不确定如何或为什么,但下面的代码可以工作。以防其他人也有同样的问题
<head>
{{>headLinks}}
</head>
<body>
<div class="main-content">
{{>profile_header}}
<div>{{{message}}}</div>
<input type="file" name="myfile" id="myfile">
</div>
{{>footer}}
<script>
$('#myfile').change(function(e) {
var file = e.target.files[0];
var formData = new FormData();
formData.append('myfile', file);
$.ajax({
url: './csv',
type: 'post',
data: formData,
processData: false,
contentType: false,
success: function() {
window.location = './dashboard'
},
crossDomain: true
});
});
</script>
</body>
</html>
const file = req.file.path
let stream = fs.createReadStream(file);
let myData = [];
let csvStream = csv
.parse()
.on("data", (data) => {
myData.push(data);
})
.on("end", () => {
myData.shift();
let query = "INSERT INTO " + table + " (TotalGuests,AlertMessage,FirstName,LastName,Company,Email,Phone,Custom1,Custom2,Custom3) VALUES ?";
conn.query(query, [myData], (error, response) => {
console.log(error || response);
const mess = response.message;
const records = mess.replace("&", "");
req.flash('alert', '<div class="alert alert-success" role="alert">Loaded - ' + records + '</div>');
res.redirect('./checklist');
}
})
});
stream.pipe(csvStream);
const file=req.file.path
让stream=fs.createReadStream(文件);
让myData=[];
让csvStream=csv
.parse()
.on(“数据”,(数据)=>{
推送(数据);
})
.on(“结束”,()=>{
myData.shift();
let query=“插入“+表+”(TotalGuests、AlertMessage、FirstName、LastName、Company、Email、Phone、Custom1、Custom2、Custom3)值?”;
conn.query(查询,[myData],(错误,响应)=>{
console.log(错误| |响应);
const mess=response.message;
const records=mess.replace(&,“”);
要求闪存(“警报”,“加载-”+记录+”);
res.redirect(“/检查表”);
}
})
});
流管(csvStream);
我已经检查过,我找到的所有站点都显示const value=[];推送((数据));用1?正确吗?如何以不同方式绑定它们?