PHP - ERROR AL HACER UN INSERT CON LOS DATOS SACADOS DE UN SELECT

 
Vista:

ERROR AL HACER UN INSERT CON LOS DATOS SACADOS DE UN SELECT

Publicado por Sergio (7 intervenciones) el 20/04/2019 15:19:35
Hola,

Soy principiante en esto y tengo que elaborar un programa en el que trayéndome datos personales de una tabla, los pueda insertar en otra.

El proceso es el siguiente: de una tabla de usuarios con los siguientes atributos:(din, nombre, apellidos, teléfono, correo, ubicación) selecciono mediante CheckBox los usuarios cogiéndoles el dni, y lo que quiero es que haciendo un select con el dni que he obtenido de cada usuario, sacar los valores de cada campo e insertarlos en otra tabla.

Al hacerlo me da el siguiente error: Recoverable fatal error: Object of class PDOStatement could not be converted to string, y es que no se que hacer para poder introducir esos valores en la tabla que yo quiero.

Dejo el código por aquí por si alguien me puede ayudar:

<?php

require_once "biblioteca.php";

cabecera ("Borrar 2", MENU_VOLVERCONVOCATORIA);

$id = recogeMatriz("id"); //AQUI RECOGO TODOS LOS DNI QUE SELECCIONO ANTERIORMENTE
$partido = recoge("menu"); //AQUI RECOJO LA TABLA DONDE QUIERO INSERTAR LOS DATOS
$db = conectaDb();
$ok = false;

if (count($id) == 0) {
print " <p>No se ha seleccionado ningún registro.</p>\n";
} else {
foreach ($id as $indice => $valor) {
try {
$conn = new PDO("mysql:host=$servidor;dbname=$dbDb", MYSQL_USER, MYSQL_PASSWORD);
} catch (PDOException $error) {
echo 'Connection error: ' . $error->getMessage();
}
$nombre = $conn->prepare("SELECT nombre FROM $dbTabla WHERE $indice LIKE :$indice");
$apellidos = $conn->prepare("SELECT apellidos FROM $dbTabla WHERE $indice LIKE :$indice");
$telefono = $conn->prepare("SELECT telefono FROM $dbTabla WHERE $indice LIKE :$indice");
$correo = $conn->prepare("SELECT correo FROM $dbTabla WHERE $indice LIKE :$indice");
$ubicacion = $conn->prepare("SELECT ubicacion FROM $dbTabla WHERE $indice LIKE :$indice");//->fetchColumn()


$consulta = $conn->prepare("INSERT INTO $partido (dni, nombre, apellidos, telefono, correo, ubicacion)
VALUES ('$indice',$nombre,'$apellidos','$telefono','$correo','$ubicacion')");

if ($consulta->execute()) {
$ok=true;
}

}
if($ok){
print " <p class=\"p2\">Empleados registrados correctamente.</p>\n";
}else{
print " <p class=\"p2\">Empleados no registrados, compruebe si ya los registró anteriormente</p>\n";
}
$conn = null;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauro
Val: 1.667
Plata
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

ERROR AL HACER UN INSERT CON LOS DATOS SACADOS DE UN SELECT

Publicado por Mauro (464 intervenciones) el 20/04/2019 23:48:02
El problema está en las sentencias de tipo:

1
$nombre = $conn->prepare("SELECT nombre FROM $dbTabla WHERE $indice LIKE :$indice");

Con el $conn->prepare lo que obtienes es un objeto PDOStatement, no un string. En todo caso deberías ejecutar el PDOStatement para obtener el string que buscas, de otro modo lo que sucede cuando haces:

1
2
$consulta = $conn->prepare("INSERT INTO $partido (dni, nombre, apellidos, telefono, correo, ubicacion)
VALUES ('$indice',$nombre,'$apellidos','$telefono','$correo','$ubicacion')");

Estás pasándole al prepare objetos PDOStatement como parámetros al insert.

Por otro lado, tengo mis dudas respecto de los primeros prepare... yo probaría ponerles comillas a los parámetros, tipo:

1
$nombre = $conn->prepare("SELECT nombre FROM $dbTabla WHERE $indice LIKE ':$indice'");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar