Página 1 de 1

Problema con UPDATE en MySQL

NotaPublicado: 2011-10-07 09:42 @445
por Txemaracas
Hola estoy teniendo problemas para poder actualizar la información que contiene una de las tablas de mi base de datos. Quiero poder introducir un comentario pero no sé qué pasa que no me lo inserta:


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $conexion = ConectarDBrss->connect();
  2.        
  3. $conexion->{'mysql_client_found_rows'}=1; #disable
  4.    
  5. my $palabra = "hello";
  6.  
  7. my $tabla = "traduc";
  8.  
  9. my $coment = $ventanaAC->textfieldac->Text();
  10.  
  11. eval  {$conexion->do("UPDATE $tabla SET comentario=$coment WHERE palabra=$palabra")};
  12.        
  13. if ($@) {
  14.  
  15.            printf("No se ha podido introducir\n")
  16.  
  17. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


La línea 3 la he incluido por lo que pone en CPAN:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
mysql_client_found_rows

Enables (TRUE value) or disables (FALSE value) the flag CLIENT_FOUND_ROWS while connecting to the MySQL server. This has a somewhat funny effect: Without mysql_client_found_rows, if you perform a query like

  UPDATE $table SET id = 1 WHERE id = 1

then the MySQL engine will always return 0, because no rows have changed. With mysql_client_found_rows however, it will return the number of rows that have an id 1, as some people are expecting. (At least for compatibility to other engines.)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



He utilizado también esto pero es que no me devuelve ningún error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $sth = $conexion->prepare("UPDATE $tabla SET comentario=$coment WHERE palabra=$palabra");
  2.        
  3. $sth->execute();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Problema con UPDATE en MySQL

NotaPublicado: 2011-10-07 09:58 @457
por explorer
Si la variable $coment o la variable $palabra contienen espacios en blanco, entonces ese es el problema: la sentencia SQL queda desordenada.

Siempre es mejor usar contenedores:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $sth = $conexion->prepare("UPDATE $tabla SET comentario=? WHERE palabra=?");
  2.  
  3. $sth->execute($coment, $palabra);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y MySQL se ocupará de "escapar" los caracteres peligrosos, como los espacios en blanco.

Re: Problema con UPDATE en MySQL

NotaPublicado: 2011-10-07 10:32 @480
por Txemaracas
Acabo de encontrar otra solución que en realidad era fallo mio. Faltan las comillas simples en '$palabra' y en '$coment'.

Re: Problema con UPDATE en MySQL

NotaPublicado: 2011-10-07 11:59 @541
por explorer
Esa solución no te salvará de los hackers... Por eso la solución de los contenedores es la que se debe usar.