You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jul 1, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Jul 1, 2026. It is now read-only.
varsqlite=require('sqlite3').verbose();vardb=newsqlite.Database('test.db');db.all('SELECT * FROM test',null,function(error,rows){if(error){console.log(error);}else{rows.forEach(function(row){console.log(row);});}});db.close();
The previous code will produce the following output:
{ [Error: SQLITE_RANGE: bind or column index out of range] errno: 25, code: 'SQLITE_RANGE' }
Changing the second argument of Database#all() from null to [] produces the desired output.
This handling of null values is both counterintuitive and undocumented. Other methods may be affected too.
Why are you passing a null value in the first place? This behavior is sort of intended; all parameters after the SQL query and before the callback functions are added as parameters to the query. Since your query doesn't have any parameters, you get this error. Using [] is an alternative syntax to passing the parameters directly and [null] will fail in a similar way. It doesn't matter what value you pass; db.all('SELECT * FROM test', 'test')` fails with the same error.
I see now. I for one never really liked the idea of variable length argument lists, and it seemed natural to pass a null for the bind values. Actually, even the formal parameter list in the docs isn’t clear on this since the comma is outside of the brackets. It would be nice to state explicitly in the description that everything before the callback will be treated as bind values.
Activity
kkaefer commentedon Feb 23, 2013
Why are you passing a null value in the first place? This behavior is sort of intended; all parameters after the SQL query and before the callback functions are added as parameters to the query. Since your query doesn't have any parameters, you get this error. Using
[]is an alternative syntax to passing the parameters directly and[null]will fail in a similar way. It doesn't matter what value you pass; db.all('SELECT * FROM test', 'test')` fails with the same error.jooadam commentedon Feb 23, 2013
I see now. I for one never really liked the idea of variable length argument lists, and it seemed natural to pass a null for the bind values. Actually, even the formal parameter list in the docs isn’t clear on this since the comma is outside of the brackets. It would be nice to state explicitly in the description that everything before the callback will be treated as bind values.
springmeyer commentedon Jun 13, 2013
@jooadam - docs are a wiki, please edit as you see fit.
hems commentedon Jun 8, 2015
lol, i can't believe adding [] was the trick. jesus!
hems commentedon Jun 9, 2015
i did a quick note at https://github.com/mapbox/node-sqlite3/wiki/API let me know what you think @springmeyer !
peace!
🎱
kkaefer commentedon Jun 10, 2015
looks good, @hems!
khelkun commentedon Mar 17, 2021
Just to say this could have its place in the README too.
I wanted to use a callback on my
db.run("CREATE TABLE lorem (info TEXT)")so I did:This gives the following error output and actually fails to create the table:
It took me some time to understand the root cause of this error was the
nullsecond parameter of mydb.runcall. Obviously this does the job: