Преобразование ключей массива в поля таблицы MySQL

Изучаю PHP относительно недолго и не перестаю удивляться красивым конструкциям преобразований "на лету", которые позволяют существенно оптимизировать код.

Через PHP PDO я делаю запрос к Microsoft SQL Server и получаю результат в виде PHP-массива:

[0] => Array
  (
    [RowID] => 132882
    [StarID] => 811
    [ValueX] => 1344.17
    [ValueY] => 517.92
    [Format] => raw
  )

Теперь мне нужно без преобразований добавить эту запись в MySQL, в таблицу с отличающимися названиями полей. В MySQL называются так:

row_id
star_id
value_x
value_y
d_format

Я принципиально не хочу делать конкатенцию кучи строк и перечислять названия всех полей, вроде:

update d_stars set value_x = ".$data['ValueX'].", value_y = ".$data['ValueY']."
where row_id = ".$data['RowID'];

Это очень громоздко и не оптимально. Однажды я видел очень красивую технику, по-моему, когда рассматривал исходный код OpenCart. Но, увы, я не могу найти тот шедевр. Помню лишь, что там были какие-то очень компактные преобразования при помощи implode.

Мой вопрос: Можно ли как-то "на лету" заменить ключи массива названиями полей в MySQL и вставить запись или обновить по row_id?


Ответы (1 шт):

Автор решения: Вадим Александру

Самый простой способ использовать PDO + класс который будет резолвить эти данные. Либо что то типо этого.

Создаем массив где будем хранить ключи массива и столбика в базе.

$fields = [
  'row_id' => 'RowID',
  'star_id' => 'StarID',
  'value_x' => 'ValueX',
  'value_y' => 'ValueY',
  'd_format' => 'Format'
];

$data = [
  'RowID' => 123,
  'StarID' => 123,
  'ValueX' => 123,
  'ValueY' => 123,
  'Format' => 123
];


$fieldQuery = [];

foreach ($fields as $column => $key)
{
  $fieldQuery[] = "{$column} = {$data[$key]}";
}

$fieldQuery = implode(',', $fieldQuery);

$query = "update d_stars set {$fieldQuery} where row_id = 222";
→ Ссылка