Pregunta

Estoy bastante frustrado. Quiero poder insertar en mi base de datos nombres con comillas simples, por ejemplo, O'Connor.

Entonces, cuando inserto en la base de datos, hago:

 $lname = mysql_real_escape_string(

Estoy bastante frustrado. Quiero poder insertar en mi base de datos nombres con comillas simples, por ejemplo, O'Connor.

Entonces, cuando inserto en la base de datos, hago:

 $lname = stripslashes($r["lname"]);

Y luego inserto $ lname en la base de datos.

Cuando está en el DB, aparece como O \ 'Connor.

Entonces, si tuviera que recordar ese apellido en mi aplicación web, tendría que usar:

 $search = mysql_real_escape_string(

Estoy bastante frustrado. Quiero poder insertar en mi base de datos nombres con comillas simples, por ejemplo, O'Connor.

Entonces, cuando inserto en la base de datos, hago:

 $lname = mysql_real_escape_string(

Estoy bastante frustrado. Quiero poder insertar en mi base de datos nombres con comillas simples, por ejemplo, O'Connor.

Entonces, cuando inserto en la base de datos, hago:

 $lname = stripslashes($r["lname"]);

Y luego inserto $ lname en la base de datos.

Cuando está en el DB, aparece como O \ 'Connor.

Entonces, si tuviera que recordar ese apellido en mi aplicación web, tendría que usar:

 ; Magic quotes
 ;

 ; Magic quotes for incoming GET/POST/Cookie data.
 magic_quotes_gpc = On

 ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
 magic_quotes_runtime = Off

 ; Use Sybase-style magic quotes (escape ' with '' instead of \').
 magic_quotes_sybase = Off

Todo esto parece funcionar bien. Sin embargo, tengo una función de búsqueda que buscará los apellidos y mostrará los resultados. Cuando busco, tengo que buscar O \ 'Connor para obtener resultados.

Verá, después de buscar, el cuadro de texto almacena automáticamente el valor de lo que se acaba de buscar (mediante sesiones). Entonces mi código es este:

<*>

Como dije antes, cuando busco, tengo que usar '' O \ 'Connor' ', y luego, después de buscar, el valor en el cuadro de texto se convierte en' 'O \\\\' Connor ''

Ha sido frustrante tratar de resolver esto. ¿Alguien sabe lo que estoy haciendo mal? Gracias!

EDITAR:

Aquí está mi archivo php5.ini, con respecto a las citas mágicas:

<*>

Sin embargo, mi sitio está alojado en GoDaddy y no tengo permisos para editar el archivo :(

POST['lname']);

Y luego inserto $ lname en la base de datos.

Cuando está en el DB, aparece como O \ 'Connor.

Entonces, si tuviera que recordar ese apellido en mi aplicación web, tendría que usar:

<*>

Todo esto parece funcionar bien. Sin embargo, tengo una función de búsqueda que buscará los apellidos y mostrará los resultados. Cuando busco, tengo que buscar O \ 'Connor para obtener resultados.

Verá, después de buscar, el cuadro de texto almacena automáticamente el valor de lo que se acaba de buscar (mediante sesiones). Entonces mi código es este:

<*>

Como dije antes, cuando busco, tengo que usar '' O \ 'Connor' ', y luego, después de buscar, el valor en el cuadro de texto se convierte en' 'O \\\\' Connor ''

Ha sido frustrante tratar de resolver esto. ¿Alguien sabe lo que estoy haciendo mal? Gracias!

EDITAR:

Aquí está mi archivo php5.ini, con respecto a las citas mágicas:

<*>

Sin embargo, mi sitio está alojado en GoDaddy y no tengo permisos para editar el archivo :(

GET['search']);

Estoy bastante frustrado. Quiero poder insertar en mi base de datos nombres con comillas simples, por ejemplo, O'Connor.

Entonces, cuando inserto en la base de datos, hago:

 $lname = mysql_real_escape_string(

Estoy bastante frustrado. Quiero poder insertar en mi base de datos nombres con comillas simples, por ejemplo, O'Connor.

Entonces, cuando inserto en la base de datos, hago:

 $lname = stripslashes($r["lname"]);

Y luego inserto $ lname en la base de datos.

Cuando está en el DB, aparece como O \ 'Connor.

Entonces, si tuviera que recordar ese apellido en mi aplicación web, tendría que usar:

<*>

Todo esto parece funcionar bien. Sin embargo, tengo una función de búsqueda que buscará los apellidos y mostrará los resultados. Cuando busco, tengo que buscar O \ 'Connor para obtener resultados.

Verá, después de buscar, el cuadro de texto almacena automáticamente el valor de lo que se acaba de buscar (mediante sesiones). Entonces mi código es este:

<*>

Como dije antes, cuando busco, tengo que usar '' O \ 'Connor' ', y luego, después de buscar, el valor en el cuadro de texto se convierte en' 'O \\\\' Connor ''

Ha sido frustrante tratar de resolver esto. ¿Alguien sabe lo que estoy haciendo mal? Gracias!

EDITAR:

Aquí está mi archivo php5.ini, con respecto a las citas mágicas:

<*>

Sin embargo, mi sitio está alojado en GoDaddy y no tengo permisos para editar el archivo :(

POST['lname']);

Y luego inserto $ lname en la base de datos.

Cuando está en el DB, aparece como O \ 'Connor.

Entonces, si tuviera que recordar ese apellido en mi aplicación web, tendría que usar:

<*>

Todo esto parece funcionar bien. Sin embargo, tengo una función de búsqueda que buscará los apellidos y mostrará los resultados. Cuando busco, tengo que buscar O \ 'Connor para obtener resultados.

Verá, después de buscar, el cuadro de texto almacena automáticamente el valor de lo que se acaba de buscar (mediante sesiones). Entonces mi código es este:

<*>

Como dije antes, cuando busco, tengo que usar '' O \ 'Connor' ', y luego, después de buscar, el valor en el cuadro de texto se convierte en' 'O \\\\' Connor ''

Ha sido frustrante tratar de resolver esto. ¿Alguien sabe lo que estoy haciendo mal? Gracias!

EDITAR:

Aquí está mi archivo php5.ini, con respecto a las citas mágicas:

<*>

Sin embargo, mi sitio está alojado en GoDaddy y no tengo permisos para editar el archivo :(

SESSION['search'] = $search;

Todo esto parece funcionar bien. Sin embargo, tengo una función de búsqueda que buscará los apellidos y mostrará los resultados. Cuando busco, tengo que buscar O \ 'Connor para obtener resultados.

Verá, después de buscar, el cuadro de texto almacena automáticamente el valor de lo que se acaba de buscar (mediante sesiones). Entonces mi código es este:

<*>

Como dije antes, cuando busco, tengo que usar '' O \ 'Connor' ', y luego, después de buscar, el valor en el cuadro de texto se convierte en' 'O \\\\' Connor ''

Ha sido frustrante tratar de resolver esto. ¿Alguien sabe lo que estoy haciendo mal? Gracias!

EDITAR:

Aquí está mi archivo php5.ini, con respecto a las citas mágicas:

<*>

Sin embargo, mi sitio está alojado en GoDaddy y no tengo permisos para editar el archivo :(

POST['lname']);

Y luego inserto $ lname en la base de datos.

Cuando está en el DB, aparece como O \ 'Connor.

Entonces, si tuviera que recordar ese apellido en mi aplicación web, tendría que usar:

<*>

Todo esto parece funcionar bien. Sin embargo, tengo una función de búsqueda que buscará los apellidos y mostrará los resultados. Cuando busco, tengo que buscar O \ 'Connor para obtener resultados.

Verá, después de buscar, el cuadro de texto almacena automáticamente el valor de lo que se acaba de buscar (mediante sesiones). Entonces mi código es este:

<*>

Como dije antes, cuando busco, tengo que usar '' O \ 'Connor' ', y luego, después de buscar, el valor en el cuadro de texto se convierte en' 'O \\\\' Connor ''

Ha sido frustrante tratar de resolver esto. ¿Alguien sabe lo que estoy haciendo mal? Gracias!

EDITAR:

Aquí está mi archivo php5.ini, con respecto a las citas mágicas:

<*>

Sin embargo, mi sitio está alojado en GoDaddy y no tengo permisos para editar el archivo :(

¿Fue útil?

Solución

Parece que Magic Quotes están habilitados en su configuración de PHP.

Para verificar si realmente está habilitado:

echo get_magic_quotes_gpc();

Para deshabilitar , edite su archivo php.ini:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

O agregue esta línea a su .htaccess:

php_flag magic_quotes_gpc Off

Otros consejos

Las comillas mágicas están habilitadas. Lo que esto significa es que cualquier cosa colocada en post u get u otras ubicaciones similares se escapa automáticamente para que los programadores principiantes no tengan que preocuparse tanto por eso. Está en desuso en la versión actual de PHP, si no recuerdo mal.

Lo que desea hacer para lidiar con esto y hacer que el script se ejecute de la misma manera desde cualquier configuración es el siguiente:

function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    return mysql_real_escape_string($value);
}

Es posible que desee modificar aún más esto para ajustar los datos no numéricos entre comillas, que es una variación común, pero creo que es mejor colocar esas comillas manualmente.

Pequeña edición en la función fixinput para verificar si su instalación de PHP tiene una cadena de escape real (las versiones anteriores no):

  function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    if (function_exists('mysql_real_escape_string')) {
      return mysql_real_escape_string($value);
    }
    else {
      return mysql_escape_string($value);
    }
  }
  

Cuando está en el DB, aparece como O \ 'Connor.

     

Entonces, si tuviera que recordar ese apellido en mi aplicación web, tendría que usar:

 $lname = stripslashes($r["lname"]);

¡Mal! Cuando escapa de cadenas con mysql_real_escape_string , solo se escapan en la consulta. La base de datos interpreta la consulta, por lo que los datos terminan en la base de datos sin ningún carácter de escape. Usted no tiene que usar stripslashes al extraer datos de la base de datos. Si cree que lo hace, significa que los datos en su base de datos están destrozados. Lo más probable es que tengas las comillas mágicas activadas.

Deberías:

  • Desactiva las comillas mágicas o invierte su efecto globalmente. Consulte el manual para obtener más detalles.
  • Utilice parámetros vinculados (La mejor solución) o escapar de todas las variables con mysql_real_escape_string . Debe hacer esto donde está creando la consulta.
  • No haga nada sobre las cosas que extrae de la base de datos.

En particular, no haga una función a la fixinput y las variantes que se enumeran en algunas de las respuestas aquí. Es la forma incorrecta de resolver el problema, ya que estropeará cualquier dato que no provenga de una solicitud http.

No compruebo si get_magic_quotes_gpc está activado / desactivado.

Acabo de hacer $ lname = mysql_real_escape_string (stripslashes ($ _ POST ['lname'])); así que si no hay ningún texto entre comillas, no quitará barras inclinadas ... si hay comillas lo hará quitarlos.

¡y funciona de maravilla para mí!

Todo lo que necesita hacer es tomar la consulta de búsqueda, mysql_real_escape_string, y debería estar perfectamente bien. Sin embargo, la mejor manera de hacer esto es no almacenarlo nunca, y en lugar de hacerlo, todo se va a la base de datos.

En su lugar, haga esto:

 

Todo lo que necesita hacer es tomar la consulta de búsqueda, mysql_real_escape_string, y debería estar perfectamente bien. Sin embargo, la mejor manera de hacer esto es no almacenarlo nunca, y en lugar de hacerlo, todo se va a la base de datos.

En su lugar, haga esto:

<*>SESSION['search'] =

Todo lo que necesita hacer es tomar la consulta de búsqueda, mysql_real_escape_string, y debería estar perfectamente bien. Sin embargo, la mejor manera de hacer esto es no almacenarlo nunca, y en lugar de hacerlo, todo se va a la base de datos.

En su lugar, haga esto:

<*>GET['search']; $search = mysql_real_escape_string(

Todo lo que necesita hacer es tomar la consulta de búsqueda, mysql_real_escape_string, y debería estar perfectamente bien. Sin embargo, la mejor manera de hacer esto es no almacenarlo nunca, y en lugar de hacerlo, todo se va a la base de datos.

En su lugar, haga esto:

<*>GET['search']);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top