Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO PDO()->prepare->execute()

Estas en el tema de PDO()->prepare->execute() en el foro de PHP en Foros del Web. Hola a todos. Tengo el siguiente código en una clase que estoy construyendo para hacer el CRUD utilizando la clase PDO. (Tiene el SQL porque ...
  #1 (permalink)  
Antiguo 27/02/2015, 14:41
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
PDO()->prepare->execute()

Hola a todos. Tengo el siguiente código en una clase que estoy construyendo para hacer el CRUD utilizando la clase PDO. (Tiene el SQL porque estoy probándola, no es un método definitivo)

Código PHP:
Ver original
  1. public function insert() {
  2.         /*exactamente esta es la línea 33 del error*/
  3.         return $this->pdo->prepare('INSERT INTO users (id, name, surnames) VALUES (:id, ":name", ":surnames")')->execute(array(":id"=>NULL, ":name"=>"otro", ":surnames"=>"mas"));
  4.     }

Tengo la siguiente tabla



Y todo ello me arroja el siguiente error que no logro resolver



¿Alguien puede ayudarme a resolverlo?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 27/02/2015, 14:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: PDO()->prepare->execute()

El problema es que estás colocando comillas de sobra dentro de la consulta, la idea es que el método execute() agregue automáticamente dichas comillas dependiendo del tipo de dato.

Eso viene perfectamente explicado en el manual, ¿por qué no lo has consultado?

Además si la columna de id es auto_increment NO debes incluirla, es decir, no debes pasarle NULL (que además también lo haces mal) porque eso lo maneja automáticamente la base de datos.

En fin, son muchos errores de manual, bastante básicos los que estás descuidando.

Y no sólo me refiero PDO, sino a que también deberías aprender más SQL.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/02/2015, 16:03
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: PDO()->prepare->execute()

He seguido tu consejo sobre las comillas, y ya no me devuelve ese error, sino que me devuelve false, y no entiendo por qué si ahora todo está correcto respecto a la consulta, parámetros, etc.

Código PHP:
Ver original
  1. return $this->pdo->prepare('INSERT INTO users (name, surnames) VALUES (:name, :surnames)')->execute(array(':name'=>'otro', ':surnames'=>'mas'));

Debería funcionar, porque tanto los manuales de MySQL y PHP indican que todo ahí está correcto.
__________________
Ayúdame a hacerlo por mi mismo.
  #4 (permalink)  
Antiguo 27/02/2015, 16:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: PDO()->prepare->execute()

Cita:
Debería funcionar, porque tanto los manuales de MySQL y PHP indican que todo ahí está correcto.
Pues te equivocas de nuevo, el manual dice que execute() devuelve FALSE en caso de error.

Por favor, separa el statement en otra variable y depura el error con errorInfo(), lee lo siguiente: http://php.net/manual/es/pdostatement.errorinfo.php

Así ya sabrás el error exacto que cometes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 27/02/2015, 16:44
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: PDO()->prepare->execute()

Ahhhhhh, ahora sí.

Resulta que el problema estaba en que cuando creé la tabla indiqué que debía ser de clave primary y not-null, pero no auto-increment, entonces tenía valor por defecto 0. Al no indicar el id, ni un valor para el id, o indicarlo pero un valor null, no lo permitía, intentaba aplicar el valor por defecto para id, pero ya estaba ocupado, por lo tanto no procesa el insert y yo me llevo gracias a ti el errorinfo, que no sabía que existía y que se le podía aplicar a algo que parecía que sólo devolvía false.

Gracias pateketrueke, cómo siempre, un placer :D
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: sql, tabla
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 17:21.