Я занят, переходя от обычных mysql_queries к подготовленным операторам, теперь я нашел функцию, которая генерировала динамический запрос, основанный на том, сколько полей не было пустыми.
Мне удалось преобразовать его, чтобы оно запускало каждое поле как отдельный запрос, но есть ли способ поместить все эти запросы в один запрос без преобразования в PDO?
public function edit($ticket_id, $department_id = '', $location_id = '', $ticketcat_id = '', $ticketsta_id = '',
$ticketmed_id = '', $ticketpri_id = '', $ticket_assigned = '', $ticket_plandate = '',
$ticket_user_name = '', $ticket_user_email = '', $ticket_user_phone = '', $ticket_subject = '') {
$data = array(
array('field' => 'department_id', 'value' => $department_id, 'type' => 'i'),
array('field' => 'location_id', 'value' => $location_id, 'type' => 'i'),
array('field' => 'ticketcat_id', 'value' => $ticketcat_id, 'type' => 'i'),
array('field' => 'ticketsta_id', 'value' => $ticketsta_id, 'type' => 'i'),
array('field' => 'ticketmed_id', 'value' => $ticketmed_id, 'type' => 'i'),
array('field' => 'ticketpri_id', 'value' => $ticketpri_id, 'type' => 'i'),
array('field' => 'ticket_assigned', 'value' => $ticket_assigned, 'type' => 'i'),
array('field' => 'ticket_plandate', 'value' => $ticket_plandate, 'type' => 's'),
array('field' => 'ticket_user_name', 'value' => $ticket_user_name, 'type' => 's'),
array('field' => 'ticket_user_email', 'value' => $ticket_user_email, 'type' => 's'),
array('field' => 'ticket_user_phone', 'value' => $ticket_user_phone, 'type' => 's'),
array('field' => 'ticket_subject', 'value' => $ticket_subject, 'type' => 's')
);
foreach($data as $id => $data_) {
IF(empty($data_['value'])) unset($data[$id]);
}
IF(count($data) > 0) {
$errors = false;
$query = 'UPDATE tickets SET ';
foreach($data as $id => $values) {
$query2 = $query.$values['field'].' = ? WHERE ticket_id = ? ';
echo $query2.'<br />';
IF($stmt = $this->db->prepare($query2)) {
$types = $values['type'].'i';
$stmt->bind_param($types, $values['value'], $ticket_id);
IF(!($stmt->execute())) {
$errors = true;
}
$stmt->close();
}
}
IF(!$errors) {
$this->db->commit();
return true;
}
return false;
}
}