|
|
|
| Всем привет. Подскажите, пожалуйста, как упростить запрос.
$update = mysql_query ("UPDATE product SET name='$name', obogrev='$obogrev', mozhohlad='$mozhohlad', obogrev2='$obogrev2', holod='$holod',
vnutrenniy='$vnutrenniy', naruzhniy='$naruzhniy', gabaritvnutr='$gabaritvnutr', gabaritvnesh='$gabaritvnesh', model='$model', freon2='$freon2',
tipcond='$tipcond', proizvod='$proizvod', vozduhoobmen='$vozduhoobmen', mozhnost='$mozhnost', razmer_kanala='$razmer_kanala',
razmer='$razmer', ves='$ves', teploholod='$teploholod', invertor='$invertor', tipvent='$tipvent', tip_vozduh='$tip_vozduh', tipwork='$tipwork',
vrazhenie='$vrazhenie', zazhita='$zazhita', rab_tok='$rab_tok', napruga='$napruga', temp_vozd='$temp_vozd', str_proizvod='$str_proizvod',
description='$description', num_code='$num_code', short_name='$short_name', $img sv_tovar='$sv_tovar' WHERE id='$id'");
|
Это полная фигня. Думаю можно сделать гораздо проще, чем перечислять все переменные. Но, как это сделать я не знаю. Заранее спасибо за ответы. | |
|
|
|
|
|
|
|
для: kapitalist
(30.05.2014 в 21:03)
| | А каким образом можно догадаться чего вы хотите, если не перечислить? Перечислять придется в любом случае, явно или нет, но придется.
Если охота сделать это "анонимно", то получите имена полей таблицы (причем нужно знать их порядок), отбросьте те, что не участвуют в обновлении (если такие есть), извлеките (с удалением) поле, которое определяет условие. Данные, которые должны быть сопоставлены этим полям, должны быть в той же последовательности, что и поля таблицы. Тогда:
<?
$update = mysql_query ('UPDATE product SET '.implode(',', array_map(function($k, $v) {
return '`'.$k.'`="'.$v.'"';
}, array($fields), array($values))).' WHERE id='.$id);
//где $fields массив имен полей таблицы, $values массив соответствующих значений
|
| |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 06:28)
| | Спасибо. Попробую сделать так. | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 06:28)
| | Интересно, почему в документации говорится, что $fields - массив, на деле получается строка, поэтому нужно как в примере делать array($fields) | |
|
|
|
|
|
|
|
для: lgar
(31.05.2014 в 20:59)
| | Вы о чем? | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 22:11)
| |
где $fields массив имен полей таблицы
|
Если $fields - массив, то array($fields), это
Array
(
[0] => Array
(
[0] => ?
[1] => ?
)
)
|
В документации
<?php
function cube($n)
{
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
|
Поэтому и возник вопрос, зачем нам массив в массиве. | |
|
|
|
|
|
|
|
для: lgar
(04.06.2014 в 18:45)
| | Даже после вопроса не удосужился ... )
Да, конечно, не нужны там объявления массива, речь то идет о "ранее подготовленных". Возможно "в уме" изначально имелся план о передаче одного массива в array_map, а потому возможно хотел array_keys(...) и массив, а может... Сейчас уже не установить по какой причине это там осталось. | |
|
|
|
|
|
|
|
для: confirm
(04.06.2014 в 19:31)
| |
Даже после вопроса не удосужился ... )
|
В моем случае, функция содержала foreach(), поэтому и запутался в 3 соснах. Как бы без лишнего array возникают warnings. | |
|
|
|
|
|
|
|
для: lgar
(04.06.2014 в 20:59)
| | Это я не удосужился глянуть по какому вопросу ко мне претензии, ибо "Интересно, почему в документации говорится, что $fields - массив, на деле получается строка..." зациклило на другом )
Ну строка понятно почему, потому как внешняя функция implode. Собственно потому чтобы не клеить "внешнюю" строку и выбрана array_map, причем с анонимной функцией. | |
|
|
|