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