Есть способ обновить только прошедшие параметры и оставить без изменений остальные? Я ищу способ избежать создания запросов на лету. например, я хочу изменить поле описания и оставить сообщение без изменений:
$MyArray['email']='';
$MyArray['description']='The new description';
$Result = pg_query_params($db,'UPDATE users SET email=$1, description=$2 WHERE id = $3', array($MyArray['email'],$MyArray['description'],$User['id']));
Спасибо д
Как и я, вы можете создать небольшую обертку, чтобы проверить измененные значения.
Как этот метод из класса, который я использую:
/** * Checks for changes between $old and $new. * All arrays must be assoc. * * The keys of $map are the keys of $old and the values of $map are the keys of $new: * $map: key => $old[key] * $map: val => $new[key] * * The return is an array with $old keys and $new values. * * @param array $old * @param array $new * @param array $map */ public function checkChanges(array $old, array $new, array $map) { $toReturn = array(); foreach ($map as $oldKey=>$newKey) { if ($old[$oldKey] != $new[$newKey]) { if (is_string($new[$newKey])) { $toReturn[$oldKey] = "'".$new[$newKey]."'"; } else { $toReturn[$oldKey] = $new[$newKey]; } } } if (count ($toReturn) == 0 ) { return null; } return $toReturn; }
Первый массив содержит старые неизменные значения. второй - новые измененные и неизменные значения (в зависимости от вашего пользователя или пользователя), а последний будет содержать ключи массива в качестве ключей для первого массива, в то время как вы используете значение как ключи для второго массива.
Это будет только PHP-решение, и оно работает для меня, так как я только обновляю эти значения.
ПРИМЕЧАНИЕ. Он не будет работать с вложенными массивами. Если у вас есть несколько массивов, вы должны сами это решить.
Нет простого способа... SQL не имеет этой функции, но вы можете сделать это простым способом в своей логике приложений.
В вашей форме выполните сериализацию исходных данных экземпляра
сериализации ($ myDataArray)
После публикации обновлений сравните его с сериализованными данными
десериализации ($ myDataArray);
$ diff = array_diff ($ original, $ modified);
Это должно дать вам представление о том, как это сделать.