Цитата: Руководство MySQL INSERT - то же самое для UPDATE:
Используйте ключевое слово DEFAULT, чтобы явно указать значение столбца по умолчанию. Это упрощает запись инструкций INSERT, которые присваивают значения всем, кроме нескольких столбцов, потому что это позволяет избежать записи неполного списка VALUES, который не включает значение для каждого столбца в таблице. В противном случае вам нужно будет записать список имен столбцов, соответствующих каждому значению в списке VALUES.
Короче, если я пишу
INSERT INTO table1 (column1,column2) values ('value1',DEFAULT);
Вставляется новая строка с столбцом2, установленная как значение по умолчанию - независимо от того, что она может быть.
Однако, если я готовлю и выполняю инструкцию в PHP:
$statement = $pdoObject->
prepare("INSERT INTO table1 (column1,column2) values (?,?)");
$statement->execute(array('value1','DEFAULT'));
Новая строка будет содержать "DEFAULT" в качестве ее текстового значения - если столбец способен сохранять текстовые значения.
Теперь я написал слой абстракции для PDO (мне это нужно) и обойти эту проблему, рассматривая возможность введения
const DEFAULT_VALUE = "randomstring";
Итак, я мог бы выполнять такие заявления:
$statement->execute(array('value1',mysql::DEFAULT_VALUE));
И затем в методе, который выполняет привязку, я бы прошел через значения, которые отправляются для привязки, и если некоторые из них равны self::DEFAULT_VALUE
, действуйте соответственно.
Я уверен, что есть лучший способ сделать это. Кто-то еще сталкивался с подобными ситуациями?