Saltar al contenido

¿Cuál es el significado del signo de interrogación en MySQL en “WHERE column =?”?

Revisamos de forma cada uno de los escritos en nuestro espacio con el objetivo de enseñarte en todo momento la información más veraz y actual.

Solución:

Las declaraciones preparadas usan el ‘?’ en MySQL para permitir el enlace de parámetros a la declaración. Altamente considerado como más seguro contra las inyecciones de SQL si se usa correctamente. Esto también permite consultas SQL más rápidas, ya que la solicitud solo debe compilarse una vez y puede reutilizarse.

El signo de interrogación representa un parámetro que luego será reemplazado. Usar consultas parametrizadas es más seguro que incrustar los parámetros directamente en la consulta.

SQL Server lo llama consultas de parametrización y Oracle lo llama variables de vinculación.

El uso varía según el idioma desde el que está ejecutando la consulta.

Aquí hay un ejemplo de cómo se usa desde PHP.

asumiendo que $mysqli es una conexión de base de datos y people es una tabla con 4 columnas.

$stmt = $mysqli->prepare("INSERT INTO People VALUES (?, ?, ?, ?)");

$stmt->bind_param('sssd', $firstName, $lastName, $email, $age);

Él 'sssd' es una bandera que identifica el resto de los parámetros, donde s representa string y d representa dígitos.

? no tiene un significado especial en MySQL WHERE = declaraciones, sólo en declaraciones preparadas

El caso más común donde lo vemos se debe al significado especial que se le da a ? por varios frameworks web como PHP y Rails.

? es solo un error de sintaxis en:

CREATE TABLE t (s CHAR(1));
SELECT * FROM t WHERE s = ?;

porque no está citado, y en:

INSERT INTO t VALUES ('a');
INSERT INTO t VALUES ("?");
SELECT * FROM t WHERE s = '?';

vuelve:

s
?

por lo tanto, aparentemente sin un significado especial.

Declaraciones preparadas de MySQL 5.0

MySQL 5.0 agregó la función de declaración preparada que tiene una semántica similar al signo de interrogación en los marcos web.

Ejemplo de los documentos:

PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
SET @a = 3;
SET @b = 4;
EXECUTE stmt1 USING @a, @b;

Producción:

hypotenuse
5

Estos también escapan de los caracteres especiales como se esperaba:

PREPARE stmt1 FROM 'SELECT ? AS s';
SET @a = "'";
EXECUTE stmt1 USING @a;

Producción:

s
'

Ejemplo de rieles

En Rails, por ejemplo, el signo de interrogación se reemplaza por un argumento dado por una variable del lenguaje de programación de la biblioteca (Ruby), por ejemplo:

Table.where("column = ?", "value")

y automáticamente cita argumentos para evitar errores e inyección SQL, generando una declaración como:

SELECT * FROM Table WHERE column = 'value';

La cotización nos salvaría en caso de algo como:

Table.where("column = ?", "; INJECTION")

Te mostramos reseñas y valoraciones

Si para ti ha sido de ayuda este artículo, sería de mucha ayuda si lo compartieras con el resto juniors de esta manera nos ayudas a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *