2010-04-06 29 views
13

¿Alguien puede decirme cómo insertar caracteres especiales en una base de datos MySQL? He hecho un script PHP que pretende insertar algunas palabras en una base de datos, aunque si la palabra contiene a 'entonces no se insertará.¿Cómo insertar caracteres especiales en una base de datos?

Puedo insertar los caracteres especiales bien cuando uso PHPmyAdmin, pero simplemente no funciona al insertarlos a través de PHP. ¿Podría ser que PHP está cambiando los caracteres especiales en algo más? Si es así, ¿hay alguna manera de hacer que se inserten correctamente?

+0

u puede simplemente pegar la parte del código donde la variable paarticular se procesa y se inserta? –

Respuesta

24
$insert_data = mysql_real_escape_string($input_data); 

Suponiendo que usted ha almacenado los datos como $input_data

+0

Eso me enseñará por no escribir un ejemplo simple de una línea. – zaf

+0

¡Lo sé! Casi eliminé mi respuesta cuando vi que me pegaste. – Anthony

+0

perfecto ... también salvó mi día. ¡Gracias! –

9

¿Se está escapando? Pruebe la función mysql_real_escape_string() y manejará los caracteres especiales.

+0

+1 por golpearme. He descubierto que obtengo más votos cuando uso el control invertido para formatear mi código en línea, si eso ayuda. – Anthony

+1

Voto de simpatía desde que respondió primero, pero no dio un ejemplo. Como si esta fuera una pregunta que no podría haber sido respondida más rápido usando PHP.net – dscher

+0

@dscher ¡Gracias! ¡Si hubiera solo más personas como tú! ;) – zaf

2

Probablemente "mysql_real_escape_string()" trabajará para u

4

que tienen más probabilidades de escapar de la cadena SQL, similar a:

SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!' 

Debe escapar de las cotizaciones, de la siguiente manera:

SELECT * FROM `table` WHERE `column` = 'Here\'s a syntax error!' 

mysql_real_escape_string() se encarga de esto.

6

uso mysql_real_escape_string

Entonces, ¿qué mysql_real_escape_string hacer?

Esta función de biblioteca PHP incluye barras diagonales inversas con los siguientes caracteres: \ n, \ r, \, \ x00, \ x1a, 'y ". La parte importante es que las comillas simples y dobles se escapan, porque estos son los caracteres con mayor probabilidad de abrir vulnerabilidades.

Infórmese sobre sql_injection. Puede utilizar este link como un inicio

+1

Otro artículo estúpido cuyo autor no tiene ni idea. La misma vieja historia acerca de las tablas de drop (buenas para asustar a los novatos, sí, pero nunca funcionan), la misma función stupidQuery que se ocupa de las citas mágicas. Y ni una palabra acerca de los valores sin cadena, como de costumbre. y la mayor protacción de $ badWords alguna vez –

+0

bien, no es el mejor artículo, pero debería familiarizarse con los conceptos básicos (lo extraje de una búsqueda rápida en Google). Si lo hace, puede proporcionar un enlace a un artículo mejor. –

+0

Bueno, escribí algunos, es la forma de respuesta SO. http://stackoverflow.com/questions/2589820/is-it-necessary-to-use-mysql-real-scape-string-when-magic-quotes-gpc-is-on –

3

cuenta que, como otros han señalado mysql_real_escape_string() va a resolver el problema (como se addslashes), sin embargo siempre debe utilizar mysql_real_escape_string() por razones de seguridad - tener en cuenta:

SELECT * FROM valid_users WHERE username='$user' AND password='$password' 

¿Y si el explorador envía

user="admin' OR (user=''" 
password="') AND ''='" 

La consulta se convierte en:

SELECT * FROM valid_users 
WHERE username='admin' OR (user='' AND password='') AND ''='' 

es decir, las comprobaciones de seguridad se omiten por completo.

C.

0
$var = mysql_real_escape_string("data & the base"); 
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like "%' .$var.'%"'); 
+0

Este es un ejemplo de trabajo para manejar el caracteres especiales en php mysql.puede reemplazar y con 'funcionará bien –

+0

puede editar su respuesta y agregar el comentario aclaratorio :-) – kleopatra

0

Utilice esta: htmlentities($_POST['field']);

Basta solamente. Este carácter especial para:

Uso de CI htmlentities($this->input->post('control_name'));

Cuestiones relacionadas