tất cả tôi muốn làm là gửi một truy vấn nhưSQLite: danh sách ràng buộc của các giá trị để "WHERE col IN (: PRM)"
SELECT * FROM table WHERE col IN (110, 130, 90);
Vì vậy, tôi đã chuẩn bị báo cáo kết quả sau
SELECT * FROM table WHERE col IN (:LST);
Sau đó, tôi sử dụng
sqlite_bind_text(stmt, 1, "110, 130, 90", -1, SQLITE_STATIC);
Đáng tiếc là điều này trở thành
SELECT * FROM table WHERE col IN ('110, 130, 90');
và vô dụng (lưu ý hai dấu nháy đơn bổ sung). Tôi đã thử đặt thêm vào 'trong chuỗi nhưng họ đã trốn thoát. Tôi không tìm thấy một tùy chọn để tắt thoát hoặc ngăn văn bản bị kèm theo dấu nháy đơn. Điều cuối cùng tôi có thể nghĩ đến là không sử dụng một tuyên bố chuẩn bị, nhưng tôi chỉ lấy nó như là lựa chọn cuối cùng. Bạn có ý tưởng hay đề xuất gì không?
Cảm ơn
Edit:
Số lượng các thông số rất linh hoạt, vì vậy nó có thể là ba con số, như trong ví dụ trên, một hoặc mười hai.
Cảm ơn trả lời của bạn. Tôi đã không đề cập đến nó trong bài viết gốc của tôi (chỉ cần chỉnh sửa), nhưng số lượng các tham số là năng động. Tôi thực sự vẫn lấy câu trả lời của bạn là "không thể", có nghĩa là tôi chỉ đơn giản là không thể sử dụng một tuyên bố chuẩn bị. – Sebastian
Không, Sebastian, đề nghị của tôi là tự động xây dựng một câu lệnh SQL với một số biến tham số và sau đó gọi sqlite_bind_in trong một vòng lặp cho mỗi tham số. Nó sẽ làm việc cho bạn. Tôi sẽ thêm mã giả vào câu trả lời. –
Để có thể gọi sql_bind_ * người ta cần gọi sql_prepare trước. Tôi không thấy điểm trong xây dựng động một câu lệnh, chuẩn bị nó, sử dụng bind, execute và finalize, thay vì chèn trực tiếp các tham số khi xây dựng truy vấn, chuẩn bị, thực hiện và hoàn thành. Dù bằng cách nào tôi sẽ cần phải gọi sql_prepare mỗi khi tôi muốn thực hiện truy vấn và đó là những gì tôi muốn lưu và chỉ làm một lần. – Sebastian