Den enda gången jag har funnit att det är viktigt att använda en heltalsparameter är i en LIMIT
klausul.
SELECT
...
LIMIT ?, ?
MySQL accepterar inte citerade strängliteraler i detta sammanhang och accepterar inte parametrar med strängtyp. Du måste använda ett heltal.
Se Parametriserad PDO-fråga och `LIMIT`-sats – fungerar inte för mina tester på detta. Det var en fråga om PDO, och jag testade inte mysqli, men jag tror att det är ett MySQL-krav på serversidan att använda heltalsparametrar i det här fallet. Så det borde gälla mysqli också.
I alla andra fall (AFAIK) kan MySQL konvertera strängar till heltal genom att läsa de inledande siffrorna i strängen och ignorera alla följande tecken.
@Dharman i en kommentar nedan hänvisar till MySQL:s stöd för heltal i ORDER BY
:
SELECT
...
ORDER BY ?
Ett heltal i ORDER BY
betyder att sortera efter kolumnen i den positionen, inte efter talets konstanta värde:
SELECT
...
ORDER BY 1 -- sorts by the 1st column
Men ett ekvivalent strängvärde som innehåller det numret fungerar inte på samma sätt. Den sorteras efter det konstanta värdet på strängen, vilket betyder att varje rad är bunden, och sorteringsordningen kommer att vara godtycklig.
SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied
Därför är detta ytterligare ett fall där datatypen för en frågeparameter är viktig.
Å andra sidan, använd ordningsnummer för att sortera efter kolumnen i den positionen i ORDER BY
eller GROUP BY
är utfasad, och vi bör inte lita på den användningen av SQL.