Node.js和sqlite、sqlite_范围:绑定或列索引超出范围
请参见下面我的答案,了解MWE强> 我知道这听起来很愚蠢,答案可能就在我面前,但我不明白为什么会出现这个SQLITE_范围错误,因为我的对象看起来好像具有所需的所有属性Node.js和sqlite、sqlite_范围:绑定或列索引超出范围,node.js,sqlite,coffeescript,Node.js,Sqlite,Coffeescript,请参见下面我的答案,了解MWE 我知道这听起来很愚蠢,答案可能就在我面前,但我不明白为什么会出现这个SQLITE_范围错误,因为我的对象看起来好像具有所需的所有属性 console.log "values " , values # Recording in db console.assert values.login? console.assert values.password_sha? console.assert values.em
console.log "values " , values
# Recording in db
console.assert values.login?
console.assert values.password_sha?
console.assert values.email?
console.assert values.token?
values.password = null
@db.run "INSERT INTO user VALUES (NULL, $login, $password_sha, $email, $token)", values, (err) ->
console.error err if err?
这是我的服务器的输出
values { login: 'ostream',
email: 'ijw',
password: 'justine',
token: 'acppn99ngiafw29',
password_sha: 'b1820c2ec34175954bdaa42038b48886b4c83f8d53f88b5315c415898855e4f8' }
{ [Error: SQLITE_RANGE: bind or column index out of range] errno: 25, code: 'SQLITE_RANGE' }
提前谢谢 插入时,应始终指定列列表:
INSERT INTO "user"(login, password_sha, email, token)
VALUES ('ostream',
'b1820c2ec34175954bdaa42038b48886b4c83f8d53f88b5315c415898855e4f8',
'ijw', 'acppn99ngiafw29');
SELECT *
FROM "user"
请记住,
user
是关键字,应该用“
或者您可以将表重命名为用户
显然,您需要做的是确保用户
对象中的键前缀为$
。否则,sqlite3
不会将它们识别为占位符的值。尝试:
sqlite3 = require 'sqlite3'
db = new sqlite3.Database('testfile.db');
user =
$name: 'hello'
$password: 'jambon'
db.run 'insert into "user" (name, password) VALUES ($name, $password)', user, (err) ->
console.log 'request executed : ', err
它没有很好的文档记录,但是查看一下您可以看到还有其他选项,比如在它们前面加上
@
或:
。在任何情况下,您的对象都必须匹配包含前缀的占位符。尝试指定列插入用户(col1、col2、col3、col4、col5)值(…)
其中列..
是您的列名。如果第一列是自动增量,则跳过它,不设置NULLFTR,这是我的表的.schema:CREATE table user(id integer主键、登录文本、密码、电子邮件文本、令牌文本)代码>lad2025:看起来很有效是的。为什么我不能直接插入值?.schema似乎匹配。仍然无法插入到数据库中。请参阅下面的答案。因此,我发现,如果对象中有任何其他属性没有映射到查询中的键,那么它会给出相同的列索引超出范围错误