Thank you!!
You've saved our sanity for today! Perhaps I should RTFM a bit more thoroughly 
next time.
We usually include plenty of error checking, but do get lazy with the bind() 
ones. Won't happen again!

Joe

⁣Sent from BlueMail ​

On 5 Jun. 2019, 23:26, at 23:26, Shawn Wagner <shawnw.mob...@gmail.com> wrote:
>If you tweak that to include some error checking:
>
>    if (sqlite3_bind_int64(stmt, 1, vals[i]) != SQLITE_OK) {
>      fprintf(stderr, "BIND ERROR: %s\n", sqlite3_errmsg(db));
>    }
>
>You'll see output like:
>
>BOUND 4
>FOUND 1,4
>BIND ERROR: bad parameter or other API misuse
>BOUND 5
>FOUND 1,4
>BIND ERROR: bad parameter or other API misuse
>BOUND 6
>FOUND 1,4
>
>From https://www.sqlite.org/c3ref/bind_blob.html:
>
>If any of the sqlite3_bind_*() routines are called with a NULL pointer
>for
>the prepared statement or with a prepared statement for which
>sqlite3_step() has been called more recently than sqlite3_reset(), then
>the
>call will return SQLITE_MISUSE.
>
>You're running into the latter situation.
>
>
>On Wed, Jun 5, 2019 at 6:07 AM Josef Barnes <j...@barnesmail.net> wrote:
>
>> It doesn't look like my attachment worked, so here is the code:
>>
>> ------------------------------------------------------------
>>
>> #include <stdio.h>
>> #include <sqlite3.h>
>>
>> int
>> main (void)
>> {
>>     int            i;
>>     sqlite3_stmt  *stmt = NULL;
>>     sqlite3       *db = NULL;
>>
>>     int vals[] = { 4, 5, 6 };
>>
>>     sqlite3_open_v2("test.db", &db, SQLITE_OPEN_READONLY, NULL);
>>     sqlite3_prepare_v2(db, "SELECT id, value FROM test WHERE value =
>?",
>> -1, &stmt, NULL);
>>
>>     for (i = 0; i < 3; i++) {
>>        sqlite3_bind_int64(stmt, 1, vals[i]);
>>        printf("BOUND %d\n", vals[i]);
>>        sqlite3_reset(stmt);
>>        while (sqlite3_step(stmt) == SQLITE_ROW) {
>>           printf("FOUND %lld,%lld\n", sqlite3_column_int64(stmt, 0),
>> sqlite3_column_int64(stmt, 1));
>>        }
>>     }
>>
>>     sqlite3_finalize(stmt);
>>     sqlite3_close_v2(db);
>>
>>     return 0;
>> }
>>
>> ------------------------------------------------------------
>>
>> On 5/6/19 11:04 pm, Josef Barnes wrote:
>> > Hi,
>> >
>> > We've come across a situation where we think there is a bug in the
>> > sqlite3_reset() function. The documentation states:
>> >
>> > "Any SQL statement variables that had values bound to them using
>the
>> > sqlite3_bind_*() API retain their values"
>> >
>> > The behaviour we are seeing appears to contradict this statement.
>I've
>> > attached a very simple example of searching for a few rows in a
>> > database. To run the example, create a database (test.db) with the
>> > following schema:
>> >
>> > CREATE table test ( id INTEGER PRIMARY KEY, value INTEGER NOT NULL
>);
>> > INSERT INTO test VALUES ( 1, 4 );
>> > INSERT INTO test VALUES ( 2, 5 );
>> > INSERT INTO test VALUES ( 3, 6 );
>> >
>> > In the example code, notice that the call to sqlite3_reset() comes
>> > after the call to sqlite3_bind_int64(). When running the example,
>it
>> > will return the first row all three times. It seems that the call
>to
>> > sqlite3_reset() actually resets the binded variable to the value it
>> > had at the last call to sqlite3_step().
>> >
>> > Is this a bug? Or is it intended behaviour? If it's intended, I
>> > recommend updating the documentation to be clear about this
>behaviour.
>> >
>> > Thanks for any insight anyone can provide.
>> >
>> > Joe
>> >
>> > _______________________________________________
>> > sqlite-users mailing list
>> > sqlite-users@mailinglists.sqlite.org
>> >
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>>
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to