Cómo escapar de las comillas simples en MySQL


Respuestas:


126

En pocas palabras:

SELECT 'This is Ashok''s Pen.';

Entonces, dentro de la cadena, reemplace cada comilla simple con dos de ellas.

O:

SELECT 'This is Ashok\'s Pen.'

Escapa de eso =)


9
Es posible que desee actualizar su publicación para incluir mysql_real_escape_string () o addedlashes () como posibles soluciones ... como en uno de los comentarios a continuación, el OP indica que solo están leyendo un archivo e insertando.
James B

3
Los métodos mysql_ * no se recomiendan para uso futuro, ya que están obsoletos .
hd1

Esa es la respuesta correcta, aunque en estos días la mejor opción es usar uno de los
Ryan

10

'es el carácter de escape. Entonces tu cadena debería ser:

Esta es la pluma de Ashok

Si está utilizando algún código de front-end, debe reemplazar la cadena antes de enviar los datos al procedimiento almacenado.

Por ejemplo, en C # puede hacer

value = value.Replace("'", "''");

y luego pasar el valor al procedimiento almacenado.


No estoy insertando datos manualmente, los extraigo del archivo y habrá vaklues: el bolígrafo de Ashok. Cómo insertarlo. creaetd un procedimiento para hacer esto .. cómo corregirlo.
Ashok Gupta

FWIW minor nit: la barra invertida es "el carácter de escape"; ''(dos comillas simples) es una alternativa especial permitida para "escapar" de un carácter de comillas simples.
ToolmakerSteve

9

Ver mi respuesta a "Cómo escapar caracteres en MySQL"

Cualquier biblioteca que esté usando para hablar con MySQL tendrá una función de escape incorporada, por ejemplo, en PHP podría usar mysqli_real_escape_string o PDO :: quote


1
No estoy insertando datos manualmente, los extraigo de Archivo y habrá valores: lápiz de Ashok. Cómo insertarlo. creó un procedimiento para hacer esto ... cómo corregirlo.
Ashok Gupta

Solo una nota This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used..
NewBee

7

Si utiliza declaraciones preparadas, el conductor manejará cualquier escape. Por ejemplo (Java):

Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
    prepped.setString(1, line);
    prepped.executeQuery();
}
conn.commit();
conn.close();

7

Utilice este código:

<?php
    $var = "This is Ashok's Pen.";

    mysql_real_escape_string($var);
?>

Esto resolverá su problema, porque la base de datos no puede detectar los caracteres especiales de una cadena.


1
Solo una nota This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used..
NewBee

6

Hay otra forma de hacer esto que puede ser más segura o no, dependiendo de su perspectiva. Requiere MySQL 5.6 o posterior, debido a la utilización de una función de cadena específica: FROM_BASE64.

Digamos que tiene este mensaje que le gustaría insertar:

"Ah", Nick Casi Decapitado agitó una mano elegante, "un asunto sin importancia ... No es como si realmente quisiera unirme ... Pensé en postularme, pero aparentemente no cumplo con los requisitos '- "

Esa cita tiene un montón de comillas simples y dobles y sería una verdadera molestia insertarla en MySQL. Si está insertando eso desde un programa, es fácil escapar de las comillas, etc. Pero, si tiene que poner eso en un script SQL, tendrá que editar el texto (para escapar de las comillas) que podría ser propenso a errores. o sensible al ajuste de palabras, etc.

En su lugar, puede codificar el texto en Base64, por lo que tiene una cadena "limpia":

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K

Algunas notas sobre la codificación Base64:

  1. La codificación Base64 es una codificación binaria , por lo que será mejor que se asegure de obtener el juego de caracteres correcto cuando realice la codificación, porque MySQL decodificará la cadena codificada en Base64 en bytes y luego los interpretará. Asegúrese de que base64MySQL esté de acuerdo sobre cuál es la codificación de caracteres (recomiendo UTF-8).
  2. Envolví la cadena en 50 columnas para facilitar la lectura en Stack Overflow. Puede ajustarlo a cualquier número de columnas que desee (o no ajustarlo en absoluto) y seguirá funcionando.

Ahora, para cargar esto en MySQL:

INSERT INTO my_table (text) VALUES (FROM_BASE64(' SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K '));

Esto se insertará sin quejas, y no tuvo que escapar manualmente ningún texto dentro de la cadena.


5

Debes escapar de los caracteres especiales usando el \carácter.

This is Ashok's Pen.

Se convierte en:

This is Ashok\'s Pen.

3

Si desea mantener (') apóstrofo en la base de datos, use este código a continuación

$new_value = str_replace("'","\'", $value); 

$ new_value se puede almacenar en la base de datos.


3

Puedes usar este código,

<?php
     $var = "This is Ashok's Pen.";
     addslashes($var);
?>

si mysqli_real_escape_string () no funciona.


3

En PHP, use mysqli_real_escape_string .

Ejemplo del manual de PHP:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("Error: %s\n", mysqli_sqlstate($link));
}

$city = mysqli_real_escape_string($link, $city);

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>



0

Para el acceso mediante programación, puede utilizar marcadores de posición para escapar automáticamente de los caracteres no seguros.

En Perl DBI, por ejemplo, puede usar:

my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string)); 

0

Utilice addedlahes () o mysql_real_escape_string ().


Solo una nota This, mysql_real_escape_string() extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used..
NewBee

Sí, necesito agregar un i ahora mysqli_real_escape_string php.net/manual/en/mysqli.real-escape-string.php
Anthony

Sería mejor actualizar su respuesta (por ejemplo, los comentarios pueden desaparecer en cualquier momento).
Peter Mortensen

0

De la forma en que lo hago, usando Delphi:

TheString para "escapar":

TheString=" bla bla bla 'em some more apo:S 'em and so on ";

Solución:

StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);

Resultado:

TheString=" bla bla bla \'em some more apo:S \'em and so on ";

Esta función reemplazará todos los Char (39) con "\ '" permitiéndole insertar o actualizar campos de texto en MySQL sin ningún problema.

¡Se encuentran funciones similares en todos los lenguajes de programación!


0

Quizás podrías echar un vistazo a la función QUOTEen el manual de MySQL.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.