php - fetch_obj - pdo query fetch array
PDO fetchAll matriz a una dimensiĆ³n (3)
Debes darle fetchAll un estilo de búsqueda
$staff = $select->fetchAll(PDO::FETCH_NUM);
De este enlace
esta puede ser una pregunta simple pero estoy luchando por entender cómo resolverla. Tengo un formulario que permite al usuario seleccionar "personal" o "todo" personal para asignar a un trabajo.
Si se selecciona personalizado, el usuario selecciona al personal haciendo clic en cada casilla de verificación, luego los inserto en una tabla de trabajos. Esto produce la matriz a continuación (3, 1, 10 son las ID del personal)
Array
(
[0] => 3
[1] => 1
[2] => 10
)
Si se selecciona "todo el personal", primero consulto una declaración de selección para obtener todas las identificaciones del personal de la tabla del personal, y luego las inserto en la tabla de tareas de la misma manera que la anterior. Sin embargo, esto produce la matriz:
Array
(
[0] => Array
(
[staffID] => 1
[0] => 1
)
[1] => Array
(
[staffID] => 23
[0] => 23
)
[2] => Array
(
[staffID] => 26
[0] => 26
)
[3] => Array
(
[staffID] => 29
[0] => 29
)
)
¿Cómo puedo convertir la matriz de arriba a la primera matriz que se muestra?
Estoy usando el siguiente código para consultar la base de datos y obtener todas las identificaciones del personal y luego insertarlas.
$select = $db->prepare("SELECT staffID FROM staff");
if($select->execute())
{
$staff = $select->fetchAll();
}
for($i = 0; $i<count($staff); $i++)
{
$staffStmt = $db->prepare("INSERT INTO staffJobs (jobID, userID) VALUES (:jobID, :staffID)");
$staffStmt->bindParam('':jobID'', $jobID, PDO::PARAM_INT);
$staffStmt->bindParam('':staffID'', $staff[$i], PDO::PARAM_INT);
$staffStmt->execute();
}
La primera matriz se inserta bien, sin embargo, la última matriz inserta ceros para el ID de personal.
¿Alguna sugerencia?
Gracias =).
Eche un vistazo al ejemplo 2 en el manual. En su primera consulta puede usar:
$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0);
Y su segunda matriz tendrá la misma forma que la primera matriz.
Si print_r($staff[$i])
dentro for
, probablemente obtendrá
Array
(
[staffID] => 1
[0] => 1
)
lo que significa que debe usar $staff[$i][''staffID'']
lugar.
La otra alternativa, que debería funcionar con su código actual, es usar PDOStatement::fetchColumn()
lugar de fetchAll()
.