rapidas - reducir tiempo de consulta sql
¿Qué representa un signo de interrogación en las consultas SQL? (6)
Esta pregunta ya tiene una respuesta aquí:
Mientras revisaba algunos libros SQL, encontré que los ejemplos tienden a utilizar signos de interrogación ( ?
) En sus consultas. ¿Que representa?
El ?
es permitir Quemeterized Query . ¿Esta consulta parametrizada permite el valor específico del tipo al reemplazar el ?
con su valor respectivo
Eso es todo.
Aquí hay una reason por la cual es mejor usar Quemeter Parameterized. Básicamente, es más fácil de leer y depurar.
El ?
es un parámetro sin nombre que puede ser completado por un programa que ejecuta la consulta para evitar la here .
Es un parámetro Puede especificarlo al ejecutar la consulta.
Lo que estás viendo es una consulta parametrizada . Se usan con frecuencia al ejecutar SQL dinámico desde un programa.
Por ejemplo, en lugar de escribir esto ( nota: pseudocódigo ):
ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()
Usted escribe esto:
ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()
Esto tiene muchas ventajas, como probablemente sea obvio. Una de las más importantes: las funciones de la biblioteca que analizan sus parámetros son inteligentes y garantizan que las cadenas se escapen correctamente. Por ejemplo, si escribe esto:
string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = ''" + s + "'')"
cmd.Execute()
¿Qué sucede cuando el usuario ingresa esto?
Robert''); DROP TABLE students; --
(La respuesta está here )
Escribe esto en su lugar:
s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()
Entonces la biblioteca desinfectará la entrada, produciendo esto:
"SELECT * FROM students where name = ''Robert''''); DROP TABLE students; --''"
¿No es todo el uso de DBMS ?
. MS SQL utiliza parámetros con nombre , que considero una gran mejora:
cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()
No creo que eso tenga ningún significado en SQL. Es posible que esté buscando Declaraciones preparadas en JDBC o algo así. En ese caso, los signos de interrogación son marcadores de posición para los parámetros de la declaración.
Normalmente representa un parámetro que debe ser suministrado por el cliente.