caracteres - escape mysql
¿Cómo escapo caracteres especiales en MySQL? (8)
La información proporcionada en esta respuesta puede conducir a prácticas de programación inseguras.
La información proporcionada aquí depende en gran medida de la configuración de MySQL, que incluye (pero no se limita a) la versión del programa, el cliente de la base de datos y la codificación de caracteres utilizada.
Ver http://dev.mysql.com/doc/refman/5.0/en/string-literals.html
MySQL recognizes the following escape sequences. /0 An ASCII NUL (0x00) character. /' A single quote (“''”) character. /" A double quote (“"”) character. /b A backspace character. /n A newline (linefeed) character. /r A carriage return character. /t A tab character. /Z ASCII 26 (Control-Z). See note following the table. // A backslash (“/”) character. /% A “%” character. See note following the table. /_ A “_” character. See note following the table.
Así que tú necesitas
select * from tablename where fields like "%string /"hi/" %";
Aunque como señala Bill Karwin a continuación , el uso de comillas dobles para delimitadores de cadenas no es SQL estándar, por lo que es una buena práctica usar comillas simples. Esto simplifica las cosas:
select * from tablename where fields like ''%string "hi" %'';
Por ejemplo:
select * from tablename where fields like "%string "hi" %";
Error:
Usted tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de "hi" "''en la línea 1
¿Cómo construyo esta consulta?
Debe usar comillas simples para los delimitadores de cadenas. La comilla simple es el delimitador de cadena SQL estándar, y las comillas dobles son delimitadores de identificador (para que pueda usar palabras o caracteres especiales en los nombres de tablas o columnas).
En MySQL, las comillas dobles funcionan (de forma no estándar) como un delimitador de cadena de forma predeterminada (a menos que establezca el modo ANSI
SQL). Si alguna vez usa otra marca de base de datos SQL, se beneficiará al adquirir el hábito de usar presupuestos de manera estándar.
Otro beneficio útil de usar comillas simples es que los caracteres literales de comillas dobles dentro de la cadena no necesitan ser escapados:
select * from tablename where fields like ''%string "hi" %'';
Desarrollé mi propio método de escape MySQL en Java (si es útil para cualquiera).
Vea el código de clase a continuación.
Advertencia: incorrecto si el modo SQL NO_BACKSLASH_ESCAPES está habilitado.
private static final HashMap<String,String> sqlTokens;
private static Pattern sqlTokenPattern;
static
{
//MySQL escape sequences: http://dev.mysql.com/doc/refman/5.1/en/string-syntax.html
String[][] search_regex_replacement = new String[][]
{
//search string search regex sql replacement regex
{ "/u0000" , "//x00" , "////0" },
{ "''" , "''" , "////'" },
{ "/"" , "/"" , "/////"" },
{ "/b" , "//x08" , "////b" },
{ "/n" , "//n" , "////n" },
{ "/r" , "//r" , "////r" },
{ "/t" , "//t" , "////t" },
{ "/u001A" , "//x1A" , "////Z" },
{ "//" , "////" , "////////" }
};
sqlTokens = new HashMap<String,String>();
String patternStr = "";
for (String[] srr : search_regex_replacement)
{
sqlTokens.put(srr[0], srr[2]);
patternStr += (patternStr.isEmpty() ? "" : "|") + srr[1];
}
sqlTokenPattern = Pattern.compile(''('' + patternStr + '')'');
}
public static String escape(String s)
{
Matcher matcher = sqlTokenPattern.matcher(s);
StringBuffer sb = new StringBuffer();
while(matcher.find())
{
matcher.appendReplacement(sb, sqlTokens.get(matcher.group(1)));
}
matcher.appendTail(sb);
return sb.toString();
}
MySQL tiene la función de cadena QUOTE , y debería resolver este problema:
Para cadenas como esa, para mí la forma más cómoda de hacerlo es doblar el ''o'', como se explica en el manual de MySQL:
Hay varias formas de incluir caracteres de comillas dentro de una cadena:
A “''” inside a string quoted with “''” may be written as “''''”. A “"” inside a string quoted with “"” may be written as “""”. Precede the quote character by an escape character (“/”). A “''” inside a string quoted with “"” needs no special treatment and need not be doubled or escaped. In the same way, “"” inside a
Las cadenas citadas con "''" no necesitan un tratamiento especial.
Es de http://dev.mysql.com/doc/refman/5.0/en/string-literals.html .
Para probar cómo insertar las comillas dobles en MYSQL usando Terminal puede usar la siguiente manera.
TableName (Name, DString) -> Esquema
insertar en los valores de TableName ("Nombre", "Mi QQDoubleQuotedStringQQ")
después de insertar el valor puede actualizar el valor en el archivo db con comillas dobles o comillas simples
tabla de actualización TableName replace (Dstring, "QQ", "/" ")
Puedes usar mysql_real_escape_string . mysql_real_escape_string()
no escapa a %
y _
, por lo que debe escapar de los comodines MySQL ( %
y _
) por separado.
Si está usando una variable al buscar en una cadena, mysql_real_escape_string()
es bueno para usted. Solo mi sugerencia:
$char = "and way''s ''hihi''";
$myvar = mysql_real_escape_string($char);
select * from tablename where fields like "%string $myvar %";