Преобразование ключей массива в поля таблицы 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";