La documentación de MySQL dice que debería ser \'
. Sin embargo, scite y mysql muestran que ''
funciona. Lo vi y funciona. ¿Qué tengo que hacer?
\'
es específico de MySQL, mientras que ''
es compatible con ANSI SQL, si no me equivoco
La documentación de MySQL dice que debería ser \'
. Sin embargo, scite y mysql muestran que ''
funciona. Lo vi y funciona. ¿Qué tengo que hacer?
\'
es específico de MySQL, mientras que ''
es compatible con ANSI SQL, si no me equivoco
Respuestas:
La documentación de MySQL que cita en realidad dice un poco más de lo que menciona. También dice
Un "
'
" dentro de una cadena entre comillas con "'
" puede escribirse como "''
".
(Además, se vinculó a la versión MySQL 5.0 de la Tabla 8.1. Secuencias especiales de escape de caracteres , y la versión actual es 5.6, pero la Tabla 8.1 actual . Secuencias especiales de escape de caracteres se parece bastante).
Creo que la nota de Postgres sobre el backslash_quote (string)
parámetro es informativa:
Esto controla si una comilla se puede representar
\'
en un literal de cadena. La forma preferida estándar de SQL para representar una comilla es doblarla (''
) pero PostgreSQL también ha aceptado históricamente\'
. Sin embargo, el uso de\'
crea riesgos de seguridad ...
Eso me dice que usar un carácter de comillas simples duplicadas es una mejor opción general y a largo plazo que usar una barra invertida para escapar de la comilla simple.
Ahora, si también desea agregar la elección del idioma, la elección de la base de datos SQL y sus peculiaridades no estándar, y la elección del marco de consulta a la ecuación, entonces podría terminar con una opción diferente. No das mucha información sobre tus limitaciones.
SQL estándar utiliza comillas duplicadas; MySQL tiene que aceptar eso para cumplir razonablemente.
'He said, "Don''t!"'
'
" dentro de una cadena entre comillas con " '
" puede escribirse como " ''
" . Un " "
" dentro de una cadena entre comillas con " "
" puede escribirse como " ""
". Preceda el carácter de comillas por un carácter de escape ("` `").
Lo que creo que significó user2087510 fue:
name = 'something'
name = name.replace("'", "\\'")
También he usado esto con éxito.
Aquí hay un ejemplo:
SELECT * FROM pubs WHERE name LIKE "%John's%"
Solo use comillas dobles para encerrar la comilla simple.
Si insiste en usar comillas simples (y la necesidad de escapar del personaje):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Hay tres formas de las que soy consciente. El primero no es el más bonito y el segundo es la forma común en la mayoría de los lenguajes de programación:
'I mustn''t sin!'
\
antes de la comilla simple.'
:'I mustn\'t sin!'
"I mustn't sin!"
\'
que es utilizada por muchos lenguajes de programación, pero ''
es compatible con más dialectos SQL, por lo que usar la opción 1 es mejor para la compatibilidad. Sqlite, por ejemplo, no funciona con escapes de barra invertida.
Reemplazar la cuerda
value = value.replace(/'/g, "\\'");
donde valor es su cadena que se va a almacenar en su base de datos.
Más lejos,
Paquete NPM para esto, puedes echarle un vistazo
Creo que si tiene algún punto de datos con apóstrofe, puede agregar un apóstrofe antes del apóstrofe
p.ej. 'Este es el lugar de John'
Aquí MYSQL asume dos frases 'Este es el lugar de John'
Puedes poner 'Este es el lugar de John'. Creo que debería funcionar de esa manera.
En PHP, me gusta usar mysqli_real_escape_string () que escapa de caracteres especiales en una cadena para usar en una instrucción SQL.
ver https://www.php.net/manual/en/mysqli.real-escape-string.php
Posiblemente fuera de tema, pero tal vez viniste aquí buscando una manera de desinfectar la entrada de texto desde un formulario HTML, de modo que cuando un usuario ingresa el carácter de apóstrofe, no arroja un error cuando intentas escribir el texto en un SQL basada en tablas en un DB. Hay un par de formas de hacer esto, y es posible que también desee leer sobre la inyección SQL, pero una opción simple en PHP es usar la función htmlspecialchars () que convertirá todos sus apóstrofes en lo '
que posiblemente desee almacenar. de todas formas.
''
o no\'
?