Обновить только переданные параметры

0

Есть способ обновить только прошедшие параметры и оставить без изменений остальные? Я ищу способ избежать создания запросов на лету. например, я хочу изменить поле описания и оставить сообщение без изменений:

$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']));

Спасибо д

  • 0
    @Isfirs and LuckyBurger: Проблема заключается в том, что после определения того, какое обновление, это: как обновить то, что было идентифицировано, без создания конкретного запроса на лету и без влияния на другие поля и без использования pg_query_params.
Теги:
prepared-statement

2 ответа

0

Как и я, вы можете создать небольшую обертку, чтобы проверить измененные значения.

Как этот метод из класса, который я использую:

    /**
     * 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-решение, и оно работает для меня, так как я только обновляю эти значения.

ПРИМЕЧАНИЕ. Он не будет работать с вложенными массивами. Если у вас есть несколько массивов, вы должны сами это решить.

0

Нет простого способа... SQL не имеет этой функции, но вы можете сделать это простым способом в своей логике приложений.

  1. В вашей форме выполните сериализацию исходных данных экземпляра

    сериализации ($ myDataArray)

  2. После публикации обновлений сравните его с сериализованными данными

    десериализации ($ myDataArray);

    $ diff = array_diff ($ original, $ modified);

Это должно дать вам представление о том, как это сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню