Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Actualizar INSERT a PDO

Estas en el tema de Actualizar INSERT a PDO en el foro de PHP en Foros del Web. Hola a todos, les comento que estoy tratando de actualizar las consultas de INSERT de mysqli a PDO. El temas es que leo el manual ...
  #1 (permalink)  
Antiguo 20/01/2014, 18:04
Avatar de zreep  
Fecha de Ingreso: octubre-2009
Ubicación: Argentina
Mensajes: 534
Antigüedad: 14 años, 6 meses
Puntos: 12
Exclamación Actualizar INSERT a PDO

Hola a todos, les comento que estoy tratando de actualizar las consultas de INSERT de mysqli a PDO.


El temas es que leo el manual oficial de PHP y lo quiero hacer para tener mayor seguridad.


No voy agregar muchos datos, pero quiero hacer algo basico para usar constantemente.


este es el codigo que uso:

Código PHP:
if(isset($_POST['aceptar'])){
    
    if(!empty(
$_POST['descripcion']) && !empty($_POST['valor']) && !empty($_POST['stock']))
    {
       
/* $rutaEnServidor =   '../store/imagenes';
        $rutaTemporal   =   $_FILES['imagen']['tmp_name'];
        $nombreImagen   =   $_FILES['imagen']['name'];
        $rutaDestino    =   $rutaEnServidor.'/'.$nombreImagen;

        move_uploaded_file($rutaTemporal,$rutaDestino);*/

        
$fecha  date("d.m.Y, H:i");
        
$desc   $_POST['descripcion'];
        
$valor  $_POST['valor'];
        
$stock  $_POST['stock'];
        
        
$sql  "INSERT INTO store (ruta,descripcion,valor,stock,fecha) values ('".$rutaDestino."','".$desc."','".$valor."','".$stock."','".$fecha."')";
        
$res  mysqli_query($sql) or die(mysqli_error());

    if (
$res){
    echo 
'inserción con exito';
    }
    }
    else{
    echo 
'no se puedo insertar';
}

Mi objetivo es aprender un poco de ustedes para poder desarrollar el codigo e ir probando...

Gracias y espero me ayuden
__________________
Zreep
  #2 (permalink)  
Antiguo 20/01/2014, 18:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Actualizar INSERT a PDO

¿Sabes ejecutar prepared-statemets de PDO?

Eso es lo primero que debes aprender a hacer, y eso se explica perfectamente en el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 20/01/2014, 18:20
Avatar de zreep  
Fecha de Ingreso: octubre-2009
Ubicación: Argentina
Mensajes: 534
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Actualizar INSERT a PDO

Gracias Pateketrueke, hice esto...

Código PHP:
try {
    
$con = new PDO('mysql:host=localhost;dbname=base','root','contraseña');
    }
    catch (
PDOException $e){
    echo 
"Failed to get DB handle: ".$e->getMessage()."";
    exit;
}


$sentencia $con->prepare("INSERT INTO prueba (nombre, pass) VALUES (:name, :pass)");
$sentencia->bindParam(':name'$nombre);
$sentencia->bindParam(':pass'$pass);


$nombre 'bnotte';
$pass 213213;
$sentencia->execute(); 
Y funciona bien... pero como agrego seguridad? Y cuando habla de sentencias preparadas, habla de esto: $sentencia = $con->prepare("INSERT INTO prueba (nombre, pass) VALUES (:name, :pass)");
__________________
Zreep
  #4 (permalink)  
Antiguo 20/01/2014, 18:24
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Actualizar INSERT a PDO

Cita:
Iniciado por zreep Ver Mensaje
Gracias Pateketrueke, hice esto...

Código PHP:
try {
    
$con = new PDO('mysql:host=localhost;dbname=base','root','contraseña');
    }
    catch (
PDOException $e){
    echo 
"Failed to get DB handle: ".$e->getMessage()."";
    exit;
}


$sentencia $con->prepare("INSERT INTO prueba (nombre, pass) VALUES (:name, :pass)");
$sentencia->bindParam(':name'$nombre);
$sentencia->bindParam(':pass'$pass);


$nombre 'bnotte';
$pass 213213;
$sentencia->execute(); 
Y funciona bien... pero como agrego seguridad? Y cuando habla de sentencias preparadas, habla de esto: $sentencia = $con->prepare("INSERT INTO prueba (nombre, pass) VALUES (:name, :pass)");
Asi ya es seguro, pero en una pagina lei que es recomendable usar bindValue en vez de bindParam, el porque no lo se
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #5 (permalink)  
Antiguo 20/01/2014, 18:34
Avatar de zreep  
Fecha de Ingreso: octubre-2009
Ubicación: Argentina
Mensajes: 534
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Actualizar INSERT a PDO

Es seguro para inserciones o algo asi que lei por ahi...
__________________
Zreep
  #6 (permalink)  
Antiguo 20/01/2014, 18:46
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Actualizar INSERT a PDO

Las consultas parametrizadas son para evitar ataques, puedes usar select insert update y delete
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #7 (permalink)  
Antiguo 20/01/2014, 18:47
Avatar de zreep  
Fecha de Ingreso: octubre-2009
Ubicación: Argentina
Mensajes: 534
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Actualizar INSERT a PDO

Esto deci el manual...

"El identificador del parámetro. Para sentencias preparadas que usen parámetros de sustición con nombre, esto será un nombre de parámetro con la forma :nombre. Para sentencias preparadas que usen parámetros de sustición de signos de interrogación, esto será la posición índice-1 del parámetro."

"Ejecutar una sentencia preparada con parámetros de sustitución de signos de interrogación"


Pero ahora me da un error que me pide que declare las varialbles... ah, es que lo voy modificando de apoco...

Código PHP:
$sentencia $con->prepare("INSERT INTO prueba (nombre, pass) VALUES (:name, :pass)");
$sentencia->bindValue(':name'$_POST['nombre']);
$sentencia->bindValue(':pass'$_POST['pass']);
$sentencia->execute();

?>

<form method="post" action="" enctype="multipart/form-data">
<input placeholder="nombre" type="text" name="nombre" /><br />
<input placeholder="pass" type="text" name="pass" /><br />
<input type="submit" name="agregar" value="agregar" />
</form> 
ERROR: Notice: Undefined index: nombre in... y lo mismo con pass... porque?
__________________
Zreep
  #8 (permalink)  
Antiguo 20/01/2014, 18:52
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Actualizar INSERT a PDO

Puede ser porque no estas enviando nada por POST
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #9 (permalink)  
Antiguo 20/01/2014, 18:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Actualizar INSERT a PDO

Cita:
Iniciado por zreep Ver Mensaje
ERROR: Notice: Undefined index: nombre in... y lo mismo con pass... porque?
Por que las variables $_POST existen únicamente cuando se recibe una petición de tipo POST, es decir, sólo cuando recibes dicho formulario es que existirán las variables.

Pero en la carga inicial, al ser de método GET, dichas variables por $_POST no existen.

Siempre debes verificar antes de hacer uso de ellas:
Código PHP:
Ver original
  1. if (!empty($_POST)) {
  2.  // acá usas $_POST
  3. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 20/01/2014, 19:17
Avatar de zreep  
Fecha de Ingreso: octubre-2009
Ubicación: Argentina
Mensajes: 534
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Actualizar INSERT a PDO

Si Pateketrueke, me habia olvidado de eso... esta al comienso... je


Y esto se supone que es seguro, como para que un cliente agrege datos sin ningun problema... No estoy pretendiendo que sea toda la seguridad, pero quiero saber que tan eficiente es (si puede se castellano) jejeje...

Gracias
__________________
Zreep
  #11 (permalink)  
Antiguo 20/01/2014, 19:19
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Actualizar INSERT a PDO

www.google.com aqui sale todo
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #12 (permalink)  
Antiguo 20/01/2014, 19:29
Avatar de zreep  
Fecha de Ingreso: octubre-2009
Ubicación: Argentina
Mensajes: 534
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: Actualizar INSERT a PDO

Jejeje... ok... gracias a todos por la ayuda... aprendi mucho...

Dejo lo que hice y aclaro para los que van a copiar y pegar... no esta terminado... trabajen y piensen un poco... no copien y pegen por que si...

Saludos


Código PHP:
try {
    
$con = new PDO('mysql:host=localhost;dbname=base','root','contraseña');
    }
    catch (
PDOException $e){
    echo 
"Failed to get DB handle: ".$e->getMessage()."";
    exit;
}


if(isset(
$_POST['agregar'])){

    if(!empty(
$_POST['nombre']) && !empty($_POST['pass'])){
        
$add $con->prepare("INSERT INTO prueba (nombre, pass) VALUES (:name, :pass)");
        
$add->bindValue(':name'$_POST['nombre']);
        
$add->bindValue(':pass'$_POST['pass']);
        
$add->execute();
    }
    else{
        echo 
'no se puedo insertar';
    }

__________________
Zreep

Etiquetas: fecha, insert, mysql, pdo, sql
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 06:18.