Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js和sqlite、sqlite_范围:绑定或列索引超出范围_Node.js_Sqlite_Coffeescript - Fatal编程技术网

Node.js和sqlite、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

请参见下面我的答案,了解MWE

我知道这听起来很愚蠢,答案可能就在我面前,但我不明白为什么会出现这个SQLITE_范围错误,因为我的对象看起来好像具有所需的所有属性

    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似乎匹配。仍然无法插入到数据库中。请参阅下面的答案。因此,我发现,如果对象中有任何其他属性没有映射到查询中的键,那么它会给出相同的
列索引超出范围
错误