Как сохранить нулевой массив?


у меня есть массив, который генерируется при выборе элементов из select multiple. В процессе записи данных я делаю это:

if (isset($_POST['temas_event'])) {
   $temas_event = json_encode($_POST['temas_event']);
} else {
   $temas_event = ['0'];
}

я заметил, что, хотя в базе он определен как значение по умолчанию "NULL" бывают случаи, когда если я ничего не выбираю в select multiple, в базе данных я записываю слово "Array" с последующими проблемами, которые он вызывает у меня при чтении записей ... то есть мое определение записи игнорирует его или это плохо определено. Что я могу сделать?

Процесс записи я выполняю как:

$conexion = new Conexion();
        $stmt = $conexion -> prepare("UPDATE usuarios_full SET nombre_event = :nombre_event, dom_event = :dom_event, lat_event = :lat_event, lng_event = :lng_event, web_event = :web_event, tel_event = :tel_event, alcance_event = :alcance_event, temas_event = :temas_event, cert_event = :cert_event, event_pagos = :event_pagos WHERE idusuario = :valor");

        $stmt->bindValue(":valor", $idusuario);

        $stmt->bindValue(":nombre_event", $nombre_event);
        $stmt->bindValue(":dom_event", $dom_event);
        $stmt->bindValue(":lat_event", $lat_event);
        $stmt->bindValue(":lng_event", $lng_event);
        $stmt->bindValue(":web_event", $web_event);
        $stmt->bindValue(":tel_event", $tel_event);
        $stmt->bindValue(":alcance_event", $alcance_event); (*******)
        $stmt->bindValue(":temas_event", $temas_event);   (*******)
        $stmt->bindValue(":cert_event", $cert_event);
        $stmt->bindValue(":event_pagos", $event_pagos);
        $stmt->execute();

        if ($stmt->rowCount() > 0) {
            $resultado = 1;
        } else {
            $resultado = NULL;
        }

где (*******) являются массивами

 1
Author: MNibor, 2017-08-01

1 answers

В процессе записи, если переменная не установлена, вы можете инициализировать ее как array().

Так, например:

$valor = isset($_POST['temas_event'])? $_POST['temas_event'] : array();
$temas_event = json_encode($valor);

С другой стороны, слово Array появляется, потому что в else вашей логики вы создаете массив, и вы не кодируете его (eg: вы не делаете егоjson_encode)

UPDATE

Поскольку вы хотите сохранить null или string, вы должны сделать это так:

$valor = isset($_POST['temas_event'])? json_encode($_POST['temas_event']) : null;
$temas_event = $valor;

Потому что вы используете PDO и вам нужно сохранить NULL или string, вам нужно, чтобы при "bindear" значение переменной $temas_event вы указали различные типы данных в зависимости от значения.

Так, например:

// ....
$type = $temas_event === null ? PDO::PARAM_INT : PDO::PARAM_STR;
$stmt->bindValue(":temas_event", $temas_event, $type);
// ....

PS: вы можете использовать PDO::PARAM_NULL для случая, когда $temas_event === null, но комментируется, что в некоторых средах PDO::PARAM_NULL, не работает должным образом

 1
Author: Marcos, 2017-08-01 19:13:06