Как сделать автоподстановку значения поля SQL при пустой строке?

В базу данных записываются данные из HTML формы. В определённых случаях, когда некоторые поля не заполнены, соответствующим переменным присваивается значение либо пустой строки, либо (bool)false. Затем из переменных формируется строка SQL запроса, и эти незаполненные поля/переменные дают в SQL пустую строку: '' .

Необходимо же сделать так, чтобы при незаполненном поле формы в соответствующую ячейку БД записывалось дефолтное значение таблицы.

Например: в форме есть поле "changelog", содержимое которого записывается в строковую переменную $changelog. Если в поле ничего не введено, в переменной $changelog оказывается пустая строка, которая именно так и записывается в поле "changelog" базы данных.
Надо же, чтобы в таких случаях в БД записывалось дефолтное значение, установленное для данного поля данной таблицы - "changelog.txt".

Можно это как-то реализовать средствами MySQL, не убирая переменную из строки SQL запроса? Городить огород с включением поля и переменной в запрос, только если переменная не является пустой строкой (или false), не хочется.

Спасибо.
  • Вопрос задан
  • 3222 просмотра
Пригласить эксперта
Ответы на вопрос 4
shaks
@shaks
Необходимо же сделать так, чтобы при незаполненном поле формы в соответствующую ячейку БД записывалось дефолтное значение таблицы.


www.mysql.ru/docs/man/ALTER_TABLE.html
ALTER [IGNORE] TABLE tbl_name  [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

В твоем случае будет чтото типа такого:
ALTER  TABLE `tbl_name`  CHANGE  `changelog`  `changelog` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT 'changelog.txt'
# @ phpmyadmin
Ответ написан
не знаю, каким именно классом PHP (для работы с СУБД) вы пользуетесь, приведу пример для старого доброго процедурного стиля:
$changelog = $_POST['changelog'];
$changelog = preg_match('/^\s*$/', $changelog) ? 'NULL' : "'" . mysqli_real_escape_string($link, $changelog) . "'";

mysqli_query($link, "INSERT INTO tbl_name (changelog) VALUES ({$changelog)}");

фокус в том, чтобы в случае, когда переменная $changelog - пустая строка, в БД нужно передавать значение NULL, чтобы СУБД подставила дефолтное значение.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
> Можно это как-то реализовать средствами MySQL, не убирая переменную из строки SQL запроса?
Нет.
По-любому строку запроса модифицировать придется.

Другое дело, что совсем не обязательно это делать руками.
Если пользоваться хотя бы минимально интеллектуальными средствами для работы с БД, а не шарашить по-старинке пещерными методами из прошлого века, то такая проблема попросту не возникает. К примеру, любой ОРМ решает ее по умолчанию.

Если никак не получается расстаться с SQL, то safemysql подойдет лучше всего.
$data = array_filter($data); // уберём пустые поля нафиг
$db->query("INSERT INTO ?n SET ?u", $table, $data);

Для остальных либ принцип тот же, но придется повозиться с передачей переменного числа параметров
Ответ написан
Комментировать
Audiophile
@Audiophile Автор вопроса
В общем, судя по всему, на MySQL задачу не решить. Значит придется править PHP и автоматически подставлять дефолтное значение где нужно.
Всем спасибо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы