Как сохранить нулевой массив?
у меня есть массив, который генерируется при выборе элементов из 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 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
, не работает должным образом