Lần duy nhất tôi thấy rằng việc sử dụng tham số số nguyên là quan trọng trong LIMIT
mệnh đề.
SELECT
...
LIMIT ?, ?
MySQL không chấp nhận các ký tự chuỗi được trích dẫn trong ngữ cảnh này và không chấp nhận các tham số có kiểu chuỗi. Bạn phải sử dụng một số nguyên.
Xem Truy vấn PDO được tham số hóa và Mệnh đề `LIMIT` - không hoạt động cho các thử nghiệm của tôi về điều này. Đó là một câu hỏi về PDO và tôi đã không kiểm tra mysqli, nhưng tôi tin rằng đó là một yêu cầu MySQL phía máy chủ để sử dụng các tham số số nguyên trong trường hợp này. Vì vậy, nó cũng sẽ áp dụng cho mysqli.
Trong tất cả các trường hợp khác (AFAIK), MySQL có thể chuyển đổi chuỗi thành số nguyên bằng cách đọc các chữ số đứng đầu trong chuỗi và bỏ qua bất kỳ ký tự nào sau đây.
@Dharman trong một bình luận bên dưới đề cập đến sự hỗ trợ của MySQL cho các số nguyên trong ORDER BY
:
SELECT
...
ORDER BY ?
Một số nguyên trong ORDER BY
có nghĩa là sắp xếp theo cột ở vị trí đó, không phải theo giá trị không đổi của số:
SELECT
...
ORDER BY 1 -- sorts by the 1st column
Nhưng một giá trị chuỗi tương đương chứa số đó không hoạt động giống nhau. Nó sắp xếp theo giá trị không đổi của chuỗi, có nghĩa là mọi hàng đều được gắn và thứ tự sắp xếp sẽ tùy ý.
SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied
Do đó, đây là một trường hợp khác mà kiểu dữ liệu cho tham số truy vấn là quan trọng.
Mặt khác, sử dụng số thứ tự để sắp xếp theo cột ở vị trí đó trong ORDER BY
hoặc GROUP BY
không được dùng nữa và chúng ta không nên dựa vào cách sử dụng SQL đó.