2011-05-18 31 views
38

esto puede ser una pregunta simple, pero estoy tratando de entender cómo resolverlo. Tengo un formulario que permite al usuario seleccionar "personal" o "todo" personal para asignarlo a un trabajo.DOP fetchAll matriz a una sola dimensión

Si se selecciona la opción personalizada, el usuario selecciona el personal haciendo clic en cada casilla de verificación, luego las inserto en un trabajo mesa. Esto produce la matriz a continuación (3, 1, 10 son el personal IDs)

Array 
(
    [0] => 3 
    [1] => 1 
    [2] => 10 
) 

Si se selecciona "todo el personal", lo primero que consultar una instrucción de selección para obtener todo el personal de identificación de de la mesa de los profesores, y luego inserte estos en la tabla de trabajos de la misma forma que en el ejemplo 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 código de abajo para consultar la base de datos para obtener todo el personal de identificación y después de la inserción de ellos.

$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 =).

Respuesta

83

Tome un vistazo a example 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.

+2

Gracias perfecto mucho =) – Elliott

+1

¡Gracias! Su enlace me ayudó a encontrar la manera de buscar un 'matriz indexada-staffID':' $ Seleccionar-> fetchAll (PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP) '. Cosas geniales – Nico

3

Si print_r($staff[$i]) dentro del for probablemente obtendría

Array 
    (
     [staffID] => 1 
     [0] => 1 
    ) 

que significa que debe utilizar $staff[$i]['staffID'] lugar.


La otra alternativa, que debe trabajar con su código actual, es utilizar PDOStatement::fetchColumn() en lugar de fetchAll().

+0

Gracias pero no me esto me requieren el uso de dos métodos diferentes? Tal como la primera matriz no contiene "ID de personal", ¿no es posible eliminar completamente el "ID de personal" y solo hacer referencia por número? – Elliott

+0

@Elliot: Veo lo que quiere decir ahora, 'fetchColumn()' debería funcionar en ambos casos. – chelmertz

1

necesario para la administración fetchAll un estilo de extracción

$staff = $select->fetchAll(PDO::FETCH_NUM); 

De this link

Cuestiones relacionadas