Jediný případ, kdy jsem zjistil, že je důležité použít celočíselný parametr, je v LIMIT
doložka.
SELECT
...
LIMIT ?, ?
MySQL v tomto kontextu nepřijímá citované řetězcové literály a nepřijímá parametry s typem řetězce. Musíte použít celé číslo.
Viz Parametrizovaný dotaz na PDO a Klauzule `LIMIT` – nefunguje pro mé testy na toto. To byla otázka týkající se PDO a mysqli jsem netestoval, ale domnívám se, že v tomto případě je použití celočíselných parametrů na straně serveru požadavek MySQL. Takže by to mělo platit i pro mysqli.
Ve všech ostatních případech (AFAIK) je MySQL schopno převádět řetězce na celá čísla čtením úvodních číslic v řetězci a ignorováním všech následujících znaků.
@Dharman v komentáři níže odkazuje na podporu MySQL pro celá čísla v ORDER BY
:
SELECT
...
ORDER BY ?
Celé číslo v ORDER BY
znamená řadit podle sloupce na této pozici, nikoli podle konstantní hodnoty čísla:
SELECT
...
ORDER BY 1 -- sorts by the 1st column
Ale ekvivalentní řetězcová hodnota obsahující toto číslo nepůsobí stejně. Třídí podle konstantní hodnoty řetězce, což znamená, že každý řádek je svázaný a pořadí řazení bude libovolné.
SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied
Toto je tedy další případ, kdy je důležitý datový typ pro parametr dotazu.
Na druhou stranu použití pořadových čísel k řazení podle sloupce na této pozici v ORDER BY
nebo GROUP BY
je zastaralý a neměli bychom se na toto použití SQL spoléhat.