sql >> Database teknologi >  >> RDS >> Mysql

mysqli_stmt::bind_param() - angiv en anden datatype end s for hver parameter

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.



  1. Hvordan opdager man en tilbagerulning i MySQL-lagret procedure?

  2. Er der en måde at hente visningsdefinitionen fra en SQL Server ved hjælp af almindelig ADO?

  3. varbinær til streng på SQL Server

  4. Begynderspørgsmål om mySQL og PHP for at undgå at oprette forbindelse til DB på hver side