Подтвердить что ты не робот

PDO fetchAll массив для одномерного

Это может быть простой вопрос, но я пытаюсь понять, как его решить. У меня есть форма, которая позволяет пользователю выбирать "пользовательский" или "весь" персонал для назначения заданию.

Если выбран пользовательский пользователь, пользователь выбирает персонал, нажимая каждый флажок, затем вставляя их в таблицу заданий. Это создает массив ниже (3, 1, 10 - идентификаторы персонала).

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

Если выбран "все сотрудники", я сначала запрашиваю оператор select, чтобы получить весь идентификатор персонала из таблицы сотрудников, а затем вставьте их в таблицу заданий так же, как указано выше. Однако это создает массив:

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

Как преобразовать массив выше в первый представленный массив?

Я использую приведенный ниже код, чтобы запросить базу данных, чтобы получить все идентификатор персонала, а затем вставить их.

    $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();              

}

Первый массив вставляет отлично, однако последний массив вставляет нули для идентификатора staff.

Любые предложения?

Спасибо =).

4b9b3361

Ответ 1

Взгляните на пример 2 в руководстве. В первом запросе вы можете использовать:

$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0);

И ваш второй массив будет иметь ту же форму, что и первый массив.

Ответ 2

Если вы print_r($staff[$i]) внутри for, вы, вероятно, получите

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

что означает, что вы должны использовать $staff[$i]['staffID'].


Другим вариантом, который должен работать с вашим текущим кодом, является использование PDOStatement::fetchColumn() вместо fetchAll().

Ответ 3

Вам нужно предоставить fetchAll стиль выборки

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

От эта ссылка