通常のmysql_queriesから準備済みの文への変更に忙しかったので、いくつのフィールドが空でないかに基づいて動的クエリを生成する関数が見つかりました。動的更新クエリを使用したMySQLi prepared文
各フィールドを別々のクエリとして実行するように変換することができましたが、を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;
}
}
pdoに変換しないとどういう意味ですか? –
PDOでは ':var'の' bind_param'関数をループすることができますが、このプロジェクトではPDOの代わりにMySQLiを使うことにしました。 – Sander