wszystko co chcę zrobić, to wysłać zapytanie jakSQLite: lista wiążą się z wartościami z "WHERE col IN (: PRM)"
SELECT * FROM table WHERE col IN (110, 130, 90);
Więc przygotowałem następujące oświadczenie
SELECT * FROM table WHERE col IN (:LST);
Następnie używam
sqlite_bind_text(stmt, 1, "110, 130, 90", -1, SQLITE_STATIC);
Niestety ta staje
SELECT * FROM table WHERE col IN ('110, 130, 90');
i jest bezużyteczny (zwróć uwagę na dwie dodatkowe pojedyncze cytaty). Próbowałem już wstawić dodatkowe "w sznurku, ale oni uciekli. Nie znalazłem możliwości wyłączenia funkcji unikania lub uniemożliwienia zawarcia tekstu pojedynczym cudzysłowem. Ostatnią rzeczą, o której myślę, że nie używam przygotowanego oświadczenia, ale biorę to tylko jako ostatnią opcję. Czy masz jakieś pomysły lub sugestie?
Dzięki
Edit:
Liczba parametrów jest dynamiczna, więc może to być trzy numery, jak w powyższym przykładzie, jedna lub dwanaście.
Dzięki za odpowiedź. Nie wspominałem o tym w moim oryginalnym wpisie (właśnie edytowanym), ale liczba parametrów jest dynamiczna. Właściwie nadal przyjmuję twoją odpowiedź jako "nie możliwe", co oznacza, że po prostu nie mogę użyć przygotowanego oświadczenia. – Sebastian
Nie, Sebastian, moja sugestia polega na dynamicznym budowaniu instrukcji SQL ze zmienną liczbą parametrów, a następnie wywoływanie sqlite_bind_in w pętli dla każdego parametru. To powinno działać dla ciebie. Dodam pseudo-kod do odpowiedzi. –
Aby móc wywołać sql_bind_ *, należy najpierw wywołać sql_prepare. Nie widzę sensu w dynamicznym budowaniu instrukcji, przygotowywaniu jej, używaniu bindowania, wykonywaniu i sfinalizowaniu, zamiast wstawiania parametrów bezpośrednio podczas budowania zapytania, przygotowania, wykonania i sfinalizowania. Tak czy inaczej, powinienem wywoływać sql_prepare za każdym razem, gdy chcę wykonać zapytanie i to jest to, co chciałbym zapisać i zrobić tylko raz. – Sebastian