Intereting Posts
Когда хранить изображения в базе данных (mySQL), а когда нет? (Привязка изображения к элементу в базе данных) Как я могу получить доступ к глубокому объекту, названному как переменная (точечная нотация) в php? Почему этот код не просто печатает буквы от A до Z? отображать ежемесячный отчет о посещаемости студента Как изменить атрибут элемента simpleXML? mod_fcgid и время жизни XCache Библиотека PHP для генерации файлов электронной почты EML? codeigniter вызов частной функции на cli PHP-массив для CSV Значения форм пусты (не значение) после визуализации виджета в форме Как включить несколько моделей в одно представление для компонента Joomla 3.x, созданного с помощью Component Creator как удалить parsererror: SyntaxError: Неожиданный токен <в JSON в позиции 0 Использование php, как вставить текст без перезаписи в начало текстового файла WooCommerce: поле пароля учетной записи на странице проверки Является ли PHP exec безопасным?

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

Первый массив вставляет отлично, однако последний массив вставляет нули для идентификатора 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); 

Из этой ссылки