Foros del Web » Programando para Internet » PHP »

Problema con real_escape_string y funcion

Estas en el tema de Problema con real_escape_string y funcion en el foro de PHP en Foros del Web. Hola a todos tengo el siguiente codigo: Código PHP:      function  nuevos_datos ( $conexion ,  $consulta ,  $escapar_datos ){         require( $_SERVER [ 'DOCUMENT_ROOT' ]. $conexion ...
  #1 (permalink)  
Antiguo 16/12/2015, 08:31
 
Fecha de Ingreso: julio-2014
Mensajes: 115
Antigüedad: 9 años, 8 meses
Puntos: 1
Problema con real_escape_string y funcion

Hola a todos tengo el siguiente codigo:
Código PHP:
    function nuevos_datos($conexion$consulta$escapar_datos){


        require(
$_SERVER['DOCUMENT_ROOT'].$conexion);
        
$SQL_insert = new mysqli($db_host$db_user$db_pass$db_name);

        if(
$escapar_datos==true){
            
$consulta $SQL_insert->real_escape_string($consulta);
        }

        if (
mysqli_query($SQL_insert$consulta)) {
            return 
true;
        } else {
            return 
false;
        }

        
mysqli_close($SQL_insert);

    } 
Con esa funcion pretendo que a parte de insertar datos en la bbdd se pueda escapar los caracteres especiales para hacerlo un poco mas seguro, pero por mucho que me devano los sesos no consigo pasarle todas las variables post del formulario, tiene que ser una funcion porque lo pretendo usar para varios scripts, he pensado en modificar el codigo de forma que en la variable $consulta seaun array con todas las variables post ¿que opinan?

el problema es que si en consulta tengo esto:
Código PHP:
$consulta='UPDATE `cuento` SET `visitas`=`visitas`+1 WHERE `id_opinion`='Texto a insertar'';

//real_escape_string lo convierte en:

$consulta='UPDATE `cuento` SET `visitas`=`visitas`+1 WHERE `id_opinion`=\'Texto a insertar\''
como consecuencia no acttualiza el registro

Muchas gracias
  #2 (permalink)  
Antiguo 16/12/2015, 11:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con real_escape_string y funcion

El problema es que "escapas" toda la consulta y eso está mal.

Debes escapar únicamente los valores que van dentro de la consulta, eso es muy diferente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/12/2015, 13:48
 
Fecha de Ingreso: julio-2014
Mensajes: 115
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Problema con real_escape_string y funcion

Cita:
Iniciado por pateketrueke Ver Mensaje
El problema es que "escapas" toda la consulta y eso está mal.

Debes escapar únicamente los valores que van dentro de la consulta, eso es muy diferente.
Yaa, jeje me di cuenta cuando hice un echo, mi idea es hacer lo siguiente:

Código PHP:
function nuevos_datos($conexion$consulta$escapar_datos){


        require(
$_SERVER['DOCUMENT_ROOT'].$conexion);
        
$SQL_insert = new mysqli($db_host$db_user$db_pass$db_name);

        if(
$escapar_datos!=false){
            
$escapar_datos $SQL_insert->real_escape_string($escapar_datos);
        }

        if (
mysqli_query($SQL_insert$consulta)) {
            return 
true;
        } else {
            return 
false;
        }

        
mysqli_close($SQL_insert);

    } 
Código PHP:
//Original
$consulta='UPDATE `cuento` SET `visitas`=`visitas`+1 WHERE `id_opinion`='Texto a insertar'';

//Cortar
$consulta='UPDATE `cuento` SET `visitas`=`visitas`+1 WHERE `id_opinion`=;

//Guardar en una variable el trozo restante
$escapar_datos='
Texto a insertar;

nuevos_datos($conexion$consulta$escapar_datos); 
Lo que tengo que hacer ahora es despues de hacer real_escape_string unir ambas variables formando la consulta original.

Saludos
  #4 (permalink)  
Antiguo 16/12/2015, 14:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con real_escape_string y funcion

¿Y por qué no usas el método prepare() si hace efectivamente lo que buscas?

Por favor consulta el manual: http://php.net/manual/es/mysqli.quic...statements.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/12/2015, 08:35
 
Fecha de Ingreso: julio-2014
Mensajes: 115
Antigüedad: 9 años, 8 meses
Puntos: 1
Respuesta: Problema con real_escape_string y funcion

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Y por qué no usas el método prepare() si hace efectivamente lo que buscas?

Por favor consulta el manual: http://php.net/manual/es/mysqli.quic...statements.php
hola gracias por responder, creo que seria una buena forma pero no consigo hacer funcionar el codigo tengo lo siguiente.

Código PHP:
    function eliminar_nuevos_datos($conexion$consulta$escapar_datos){
        
        
// Create connection
        
require($_SERVER['DOCUMENT_ROOT'].$conexion);
        
        
$SQL_insert = new mysqli($db_host$db_user$db_pass$db_name);


        
//Si se quiere escapar los datos
        
if($escapar_datos!=false){

            if (
$stmt $SQL_insert->prepare($consulta)) {

                
/* bind parameters for markers */
                
$stmt->bind_param($escapar_datos[0], $escapar_datos[1]);

                
/* execute query */
                
$stmt->execute();

                
/* close statement */
                
$stmt->close();
            }

        }
mysqli_close($SQL_insert);

y me da como respuesta:

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in ...

en $consulta la variable contiene:
Código PHP:
$consulta='UPDATE `cuento` SET `visitas`=`visitas`+1 WHERE  WHERE `id_user`=? AND `id_opinion`=?'
Queria hacer que funcionase y luego implementar la linea para escapar los caracteress especiales.

Gracias

[EDITO]
He indagado un poco y descubri que poniendo dos "s" ya no me daba error asi de esta forma:
Código PHP:
$stmt->bind_param("ss"$escapar_datos[0], $escapar_datos[1]); 
Eso es porque son variables string, pero si quiero substituir $escapar_datos[0], $escapar_datos[1] por solo $escapar_datos y que opere como si fuera $escapar_datos[0], $escapar_datos[1] ¿tendria que poner "ss"?

Saludos

Última edición por jonyjdv; 18/12/2015 a las 08:51

Etiquetas: formulario, funcion, mysql, registro, sql, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:14.