query fetch_obj fetch_assoc fetch_array array php arrays pdo

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() .