Nếu bạn đang cố gắng làm những gì có vẻ như bạn đang cố gắng làm ... đừng cố gắng làm điều đó.
Đó không phải là những gì một tuyên bố chuẩn bị sẵn (hoặc ít nhất đó không phải là những gì nó nên như vậy).
Mã máy khách của bạn không nên cố gắng nội suy các giá trị vào chuỗi truy vấn để tạo truy vấn "đã hoàn thành" để gửi đến máy chủ để thực thi. Đó là công thức dẫn đến thảm họa, chưa kể đến cảm giác an toàn sai lầm.
Các câu lệnh chuẩn bị cung cấp câu lệnh với ?
chỗ dành sẵn cho máy chủ nguyên trạng, nơi máy chủ "chuẩn bị" câu lệnh để thực thi ... và sau đó máy khách gửi các tham số đến máy chủ ("ràng buộc" các tham số) để thực thi. Làm điều này, máy chủ sẽ không bao giờ bị nhầm lẫn "phần nào là SQL" và "phần nào là dữ liệu", khiến cho việc tiêm sql không thể thực hiện được và khiến việc thoát và khử trùng dữ liệu là không cần thiết.
Nếu bạn không giao tiếp trực tiếp với C-API thì bạn nên gọi các phương thức trong thư viện của mình để hiển thị các chức năng tương tự cho bạn.