tagsinput tag ejemplos bootstrap php mysql mysql-error-1064

php - ejemplos - tagsinput get value



Cómo tratar con Apostrophe al escribir en la base de datos Mysql (4)

El proceso de codificación de datos que contiene caracteres que MySQL podría interpretar se llama "escape". Debe escapar de sus cadenas con mysql_real_escape_string , que es una función de PHP, no una función de MySQL, lo que significa que debe ejecutarlo en PHP antes de pasar su consulta a la base de datos. Debe escapar de cualquier información que ingrese a su programa desde una fuente externa. Cualquier información que no se escape es una posible inyección SQL .

Debe escapar de sus datos antes de construir su consulta. Además, puede generar su consulta programáticamente utilizando las construcciones y el range bucle de PHP:

// Build tag fields $tags = ''tag'' . implode('', tag'', range(1,30)); // Escape each value in the uniqkey array $values = array_map(''mysql_real_escape_string'', $uniqkey); // implode values with quotes and commas $values = "''" . implode("'', ''", $values) . "''"; $query = "INSERT INTO alltags (id, $tags) VALUES ('''', $values)"; mysql_query($query) or die(mysql_error());

Esta pregunta ya tiene una respuesta aquí:

Estoy recibiendo este 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 a usar cerca de ''s'', ''portal'', '''', ''oferta'', ''MSNBC'', ''Noticias'', '''', ''deportes'', '''', ''MSN'', ''Money'', '''', ''juegos'' ''en la línea 3

El único problema es que este error aparece al insertar datos que contienen apóstrofes. Traté de cambiar el tipo de datos de VARCHAR a TEXT , pero el resultado sigue siendo el mismo.

Intenté poner addslashes()

¿Cómo arreglar esto?

EDITAR:

$query=" INSERT INTO alltags (id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30) VALUES ('''',mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) "; mysql_query($query) or die(mysql_error());

Lo cambié a mysql_real_escape_string . ¿Es esta sintaxis correcta? Estoy recibiendo errores.


El uso de mysql_real_escape_string es un enfoque más seguro para manejar los caracteres para la inserción / actualización de SQL:

INSERT INTO YOUR_TABLE VALUES (mysql_real_escape_string($var1), mysql_real_escape_string($var2))

Además, cambiaría tus columnas de TEXT a VARCHAR; la búsqueda, además de la indexación, funciona mucho mejor.

Actualización para su actualización

Siendo esa id es una columna auto_increment puedes:

  • dejarlo fuera de la lista de columnas, por lo que no tiene que proporcionar un valor en la cláusula VALUES:

    INSERT INTO alltags (tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30) VALUES (mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) ";

  • incluye id en la lista de columnas, que requiere que uses cualquiera de los valores en su lugar en la cláusula VALUES:

    • NULL
    • DEFAULT

Aquí hay un ejemplo que usa NULL como marcador de posición id:

INSERT INTO alltags (id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30) VALUES (NULL,mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) ";

Realmente quiero enfatizar que no debes configurar tus columnas así.


Ligera mejora de la respuesta de Meagar:

EDITAR: meagar actualizó su publicación, por lo que su respuesta es ahora mejor.

$query = ''INSERT INTO alltags (id, ''; // append tag1, tag2, etc. $query .= ''tag'' . implode('', tag'', range(1, 30)) . ") VALUES ('''', "; // escape each value in the uniqkey array $escaped_tags = array_map(''mysql_real_escape_string'', $uniqkey); // implode values with quotes and commas, and add closing bracket $query .= "''" . implode("'', ''", $escaped_tags) . "'')"; // actually query mysql_query($query) or die(mysql_error());


Por favor mira la respuesta de meagars. Este es el código correcto.

Si desea utilizar la función mysql_query () mal guiada, debe dividir la cadena SQL de la siguiente manera:

mysql_query( "INSERT INTO whateever (col1,col2,col3,col4) VALUES (" . mysql_real_escape_string($col1) . "," . mysql_real_escape_string($col2) . "," . mysql_real_escape_string($col3) . "," . mysql_real_escape_string($col4) . ")" );

O bien, dado que tienes una matriz, usa la llamada al método inteligente para escapar de una vez:

$uniqkey = array_map("mysql_real_escape_string", $uniqkey); mysql_query("USE THE ESCAPED ARRAY THEN DIRECTLY (''$uniqkey[0]'', ''$uniqkey[1]'', ''$uniqkey[2]'', ''$uniqkey[3]'', ...");