Loi*_*nen 5 sqlite node.js coffeescript
关于MWE,请参阅下面的答案!
我知道这听起来很愚蠢,答案可能就在我面前,但我无法弄清楚为什么我会得到这个SQLITE_RANGE错误,因为我的对象看起来好像需要所有属性.
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?
Run Code Online (Sandbox Code Playgroud)
这是我的服务器的输出
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' }
Run Code Online (Sandbox Code Playgroud)
提前致谢!
显然,您需要做的是确保对象中的键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
Run Code Online (Sandbox Code Playgroud)
它没有很好的记录,但是查看测试用例,您可以看到还有其他选项,例如在它们前面加上@or前缀:。无论如何,您的对象必须与包括前缀在内的占位符匹配。
当您执行以下操作时,应始终指定列列表INSERT:
INSERT INTO "user"(login, password_sha, email, token)
VALUES ('ostream',
'b1820c2ec34175954bdaa42038b48886b4c83f8d53f88b5315c415898855e4f8',
'ijw', 'acppn99ngiafw29');
SELECT *
FROM "user"
Run Code Online (Sandbox Code Playgroud)
请记住,这user是关键字,应该用引号引起来",或者您可以将表重命名为users.
| 归档时间: |
|
| 查看次数: |
10277 次 |
| 最近记录: |