我有一个名为'website'的数据库,它有一个'users'表,它有5列,分别是:
id
,first_name
,last_name
,username
和password
我在一个名为User.js的js文件中声明了构造函数,我有一个文件UserDB.js,它将在我的网站的注册表单中执行SQL命令,以便在数据库中添加详细信息。
由于注册页面没有'id'(因为id用于添加值增量),我只想插入first_name
,last_name
,username
,{ {1}}将数据库记录中有5个值,但我收到Postman的以下消息
password
这是我的UserDB.js文件,我必须放什么不影响id列?
UserDB.js - 已更新
"sqlMessage": "Out of range value for column 'id' at row 1",
Postman的结果:
insert(user, callback) {
var sql = "INSERT INTO website.users VALUES(?,?,?,?)";
db.query(sql, [user.getFirstName(), user.getLastName(), user.getUsername(), user.getPassword()], callback)
}
user.js的
{
"code": "ER_WRONG_VALUE_COUNT_ON_ROW",
"errno": 1136,
"sqlMessage": "Column count doesn't match value count at row 1",
"sqlState": "21S01",
"index": 0,
"sql": "INSERT INTO website.users VALUES('first','last','user','123')"
}
答案 0 :(得分:0)
试试这个 DB.js:
insert(user, callback) {
var sql = "INSERT INTO website.users (`first_name`,`last_name`,`username`,`password`) VALUES(?,?,?,?)";
db.query(sql, [user.getFirstName(), user.getLastName(), user.getUsername(), user.getPassword()], callback)
}
我已从插入查询中删除了id列,并假设列id is auto-increment
更新了以下部分,请看一下:
getPassword() {
return this.Password;
}
将此替换为..
getPassword() {
return this.password;
}
变量名称有所不同。
答案 1 :(得分:0)
只需指定要明确插入的字段:
INSERT INTO website.users (first_name,last_name,username,password) VALUES(?,?,?,?);
同时删除php代码中的第一个值:
db.query(sql, [user.getFirstName(), user.getLastName(), user.getUsername(), user.getPassword()], callback);
如果您的DDL没有问题,未指定的字段将自动填充值。
此处的代码现在可以,但您的数据已被污染。所以你现在应该做的是:
ALTER TABLE users AUTO_INCREMENT = 6; --replace it with the right value
然后一切都会好的。