Den eneste gang jeg har fundet det vigtigt at bruge en heltalsparameter er i en LIMIT
klausul.
SELECT
...
LIMIT ?, ?
MySQL accepterer ikke citerede strenge bogstaver i denne sammenhæng og accepterer ikke parametre med strengtype. Du skal bruge et heltal.
Se Parametriseret PDO-forespørgsel og `LIMIT` klausul - virker ikke til mine tests på dette. Det var et spørgsmål om PDO, og jeg testede ikke mysqli, men jeg tror, det er et MySQL-krav på serversiden at bruge heltalsparametre i dette tilfælde. Så det burde også gælde for mysqli.
I alle andre tilfælde (AFAIK) er MySQL i stand til at konvertere strenge til heltal ved at læse de førende cifre i strengen og ignorere eventuelle følgende tegn.
@Dharman henviser i en kommentar nedenfor til MySQL's understøttelse af heltal i ORDER BY
:
SELECT
...
ORDER BY ?
Et heltal i ORDER BY
betyder at sortere efter kolonnen i den position, ikke efter den konstante værdi af tallet:
SELECT
...
ORDER BY 1 -- sorts by the 1st column
Men en tilsvarende strengværdi, der indeholder det tal, virker ikke på samme måde. Den sorterer efter den konstante værdi af strengen, hvilket betyder, at hver række er bundet, og sorteringsrækkefølgen vil være vilkårlig.
SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied
Derfor er dette endnu et tilfælde, hvor datatypen for en forespørgselsparameter er vigtig.
På den anden side kan du bruge ordenstal til at sortere efter kolonnen i den position i ORDER BY
eller GROUP BY
er forældet, og vi bør ikke stole på den brug af SQL.