sql >> Base de Datos >  >> RDS >> Mysql

mysqli_stmt::bind_param() - especifica otro tipo de datos que no sea s para cada parámetro

La única vez que he encontrado que es importante usar un parámetro entero es en un LIMIT cláusula.

SELECT
...
LIMIT ?, ?

MySQL no acepta literales de cadena entre comillas en este contexto y no acepta parámetros con tipo de cadena. Tienes que usar un número entero.

Consulte Consulta PDO parametrizada y Cláusula `LIMIT`:no funciona para mis pruebas sobre esto. Esa fue una pregunta sobre PDO, y no probé mysqli, pero creo que es un requisito de MySQL del lado del servidor para usar parámetros enteros en este caso. Por lo tanto, también debería aplicarse a mysqli.

En todos los demás casos (AFAIK), MySQL puede convertir cadenas en números enteros leyendo los primeros dígitos de la cadena e ignorando los caracteres siguientes.

@Dharman en un comentario a continuación hace referencia al soporte de MySQL para números enteros en ORDER BY :

SELECT
...
ORDER BY ?

Un entero en ORDER BY significa ordenar por la columna en esa posición, no por el valor constante del número:

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

Pero un valor de cadena equivalente que contenga ese número no actúa de la misma manera. Ordena por el valor constante de la cadena, lo que significa que cada fila está vinculada y el orden de clasificación será arbitrario.

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

Por lo tanto, este es otro caso en el que el tipo de datos para un parámetro de consulta es importante.

Por otro lado, usar números ordinales para ordenar por la columna en esa posición en ORDER BY o GROUP BY está en desuso y no debemos confiar en ese uso de SQL.