Is there any reason why you need to bind it?
 
Can't you just build the SQL string yourself?  As long as your IN parameters 
are well-controlled I don't think it should be a security risk.  Plus you can 
check for more then one"(" after you build the string.
 
#include <stdio.h>
#include <string.h>
int countparens(char *s)
{
        int n=0;
        char *p;
        while((p=strchr(s,'('))) {
                s=p+1;
                n++;
        }
        return n;
}
main()
{
        char sql[4096];
        char param[256];
        int inlist[4] = {1,2,3,4};
        int i;
        strcpy(sql,"SELECT * FROM table WHERE tabledID IN(");
        for(i=0;i<sizeof(inlist)/sizeof(int);i++) {
                if (i==0) sprintf(param,"%d",inlist[i]);
                else sprintf(param,",%d",inlist[i]);
                strcat(sql,param);
        }
        strcat(sql,");");
        if (countparens(sql)>1) {
                printf("SQL too many parens?? - %s\n",sql);
        }
        puts(sql);
}

 
Michael D. Black
Senior Scientist
Northrop Grumman Mission Systems
 

________________________________

From: sqlite-users-boun...@sqlite.org on behalf of Sam Carleton
Sent: Sun 7/11/2010 8:42 PM
To: General Discussion of SQLite Database
Subject: EXTERNAL:[sqlite] binding an IN



Is there any way to bind to this query?

SELECT * FROM table WHERE tableId IN ( ? );

Where ? should be 1,2,3,4
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to