Ответ 1
Взгляните на пример 2 в руководстве. В первом запросе вы можете использовать:
$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0);
И ваш второй массив будет иметь ту же форму, что и первый массив.
Это может быть простой вопрос, но я пытаюсь понять, как его решить. У меня есть форма, которая позволяет пользователю выбирать "пользовательский" или "весь" персонал для назначения заданию.
Если выбран пользовательский пользователь, пользователь выбирает персонал, нажимая каждый флажок, затем вставляя их в таблицу заданий. Это создает массив ниже (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.
Любые предложения?
Спасибо =).
Взгляните на пример 2 в руководстве. В первом запросе вы можете использовать:
$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0);
И ваш второй массив будет иметь ту же форму, что и первый массив.
Если вы print_r($staff[$i])
внутри for
, вы, вероятно, получите
Array
(
[staffID] => 1
[0] => 1
)
что означает, что вы должны использовать $staff[$i]['staffID']
.
Другим вариантом, который должен работать с вашим текущим кодом, является использование PDOStatement::fetchColumn()
вместо fetchAll()
.
Вам нужно предоставить fetchAll стиль выборки
$staff = $select->fetchAll(PDO::FETCH_NUM);
От эта ссылка