Установка значения MySQL для строки по умолчанию в Stack Overflow

Итак, у меня есть форма PHP для добавления строки в базу данных. Если какое-либо из необязательных полей пусто, следует использовать значение по умолчанию для этого поля.

Я попытался реализовать это с MySQLi следующим образом:

$required = $_POST["required"];
$unrequired = isset($_POST["unrequired"])?$_POST["unrequired"]:"DEFAULT(`Unrequired`)";

$sql = $mysqli->prepare("INSERT INTO `table` (`Required`,`Unrequired`) VALUES (?,?)");
$sql->bind_param("is",$required,$unrequired);
$sql->execute();

Но когда я пытаюсь получить значение необязательного поля с помощью SELECT unrequired FROM table WHERE required = 33, Я получил УМОЛЧАНИЮ ( `Unrequired`) вместо значения по умолчанию столбца для столбцов varchar, и 0 для int и двойных столбцов.

Эта проблема вызвана PHP или MySQL?

НОТА: Некоторые из необязательных полей обнуляются, а некоторые нет. Те, которые не обнуляются, имеют установленное значение по умолчанию. значение по умолчанию для int и double полей равно 1, остальные обнуляются.

2

Решение

Разве вы не можете просто установить значение по умолчанию в вашей структуре базы данных. Ниже вы можете увидеть пример;

CREATE TABLE example_table
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Address varchar(255), DEFAULT 'unrequired'
City varchar(255) DEFAULT 'Unrequired'
)

Когда вы создаете свой стол таким образом, вы готовы идти. Вы также можете изменить свой стол

ALTER TABLE example_table
ALTER City SET DEFAULT 'Unrequired'
0

Другие решения

Хорошо, я думаю, что я понял проблему.

Поскольку я использую подготовленные заявления, каждый параметр, который я вставил в оператор запроса reslting SQL, будет преобразован в безопасные строки, целые или двойные числа, поэтому я предполагаю выражения типа DEFAULT(column) будет интерпретироваться как "DEFAULT(column)"и будет рассматриваться как строки.

Хотя это и не очень безопасное решение, я рассмотрел использование не подготовленных операторов, то есть согласование каждого параметра и использование ДЕФОЛТ как здесь. Чтобы сделать запросы более безопасными, я буду использовать real_escape_string () для строк.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector