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

mysqli_stmt::bind_param() - specifica un tipo di dati diverso da s per ogni parametro

L'unica volta che ho scoperto che è importante utilizzare un parametro intero è in un LIMIT clausola.

SELECT
...
LIMIT ?, ?

MySQL non accetta stringhe letterali tra virgolette in questo contesto e non accetta parametri con tipo stringa. Devi usare un numero intero.

Vedere Query PDO parametrizzata e Clausola `LIMIT` - non funzionante per i miei test su questo. Questa era una domanda su PDO e non ho testato mysqli, ma credo che sia un requisito MySQL lato server per utilizzare parametri interi in questo caso. Quindi dovrebbe valere anche per mysqli.

In tutti gli altri casi (AFAIK), MySQL è in grado di convertire le stringhe in numeri interi leggendo le cifre iniziali nella stringa e ignorando i caratteri seguenti.

@Dharman in un commento qui sotto fa riferimento al supporto di MySQL per i numeri interi in ORDER BY :

SELECT
...
ORDER BY ?

Un numero intero in ORDER BY significa ordinare per colonna in quella posizione, non per valore costante del numero:

SELECT
...
ORDER BY 1 -- sorts by the 1st column

Ma un valore di stringa equivalente contenente quel numero non si comporta allo stesso modo. Ordina in base al valore costante della stringa, il che significa che ogni riga è legata e l'ordinamento sarà arbitrario.

SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied

Pertanto questo è un altro caso in cui il tipo di dati per un parametro di query è importante.

D'altra parte, usando i numeri ordinali per ordinare in base alla colonna in quella posizione in ORDER BY o GROUP BY è deprecato e non dovremmo fare affidamento su tale utilizzo di SQL.