Jedynym przypadkiem, w którym zauważyłem, że ważne jest użycie parametru liczby całkowitej, jest w LIMIT
klauzula.
SELECT
...
LIMIT ?, ?
MySQL nie akceptuje w tym kontekście literałów napisów w cudzysłowie i nie akceptuje parametrów typu string. Musisz użyć liczby całkowitej.
Zobacz Sparametryzowane zapytanie PDO i Klauzula `LIMIT` - nie działa za moje testy na tym. To było pytanie o PDO i nie testowałem mysqli, ale uważam, że jest to wymóg MySQL po stronie serwera, aby używać parametrów całkowitych w tym przypadku. Powinno to więc dotyczyć również mysqli.
We wszystkich innych przypadkach (AFAIK) MySQL jest w stanie konwertować łańcuchy na liczby całkowite, odczytując wiodące cyfry w łańcuchu i ignorując kolejne znaki.
@Dharman w poniższym komentarzu odwołuje się do obsługi przez MySQL liczb całkowitych w ORDER BY
:
SELECT
...
ORDER BY ?
Liczba całkowita w ORDER BY
oznacza sortowanie według kolumny na tej pozycji, a nie według stałej wartości liczby:
SELECT
...
ORDER BY 1 -- sorts by the 1st column
Ale równoważna wartość ciągu zawierająca tę liczbę nie działa tak samo. Sortuje według stałej wartości ciągu, co oznacza, że każdy wiersz jest powiązany, a porządek sortowania będzie dowolny.
SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied
Dlatego jest to kolejny przypadek, w którym ważny jest typ danych dla parametru zapytania.
Z drugiej strony, używając liczb porządkowych do sortowania według kolumny w tej pozycji w ORDER BY
lub GROUP BY
jest przestarzałe i nie powinniśmy polegać na takim użyciu SQL.