Как я могу использовать MySQL NOT NULL с PHP?

У меня есть форма для вставки значений в базу данных MySQL с PHP (пример кода ниже):

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<style>
label{text-align:left;
width:150px;
display:block;
float:left;
clear:right;
font-size:18;}

form {
width: 30%;
margin: 0 auto;
}
</style>
<label>Name:</label><input name=name autocomplete=off><br>
<label>Date of Birth:</label><input size=2 name=dd placeholder=dd> / <input size=2 name=mm placeholder=mm> / <input size=6 name=yyyy placeholder=yyyy><br>
<label>Time of Birth:</label><input name=tob placeholder="hh : mm : ss"><br>
<label>City:</label><input name=city><br><br>
<center><input type=submit value=Save></center>
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$servername = "localhost";
$username = "userame";
$password = "password";
$dbname = "myDB2";
if(empty($_POST["name"])){ echo "Name is Required<br>";}
else {
$name = $_POST["name"];
}
var_dump($name);
$tob = $_POST["tob"];
$city = $_POST["city"];
$dd = $_POST["dd"];
$mm = $_POST["mm"];
$yyyy = $_POST["yyyy"];

$dob = "$yyyy-$mm-$dd";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

//Inserting Data
$sql = "INSERT INTO Person
VALUES('$name','$dob','$tob','$city')";
if ($conn->query($sql) === TRUE) {
echo "<br>New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
}
?>

И КОЛОННА Name установлен в varchar(60) NOT NULL UNIQUE тип данных & ограничение.


Несмотря на

  • NOT NULL ограничение для Name Колонна и

  • if(empty($_POST["name"])){ echo "Name is Required";}
    else {
    $name = $_POST["name"];
    }

Когда я вставляю форму отправки без ввода какого-либо значения в поле ввода имени, я получаю следующее сообщение (согласно коду)

Имя обязательно
НОЛЬ
Новая запись успешно создана

И моя база данных выводится так:

screen0

Здесь вы можете увидеть, что var_dump($name) говорит $name является NULL НО все еще MySQL Database принимает это значение для Name Колонка!


Итак, мой вопрос в чем польза NOT NULL или же Как я могу использовать MysQL NOT NULL с PHP? для вставки данных с помощью формы?

0

Решение

Вам нужно перевести PHP null в SQL NULL введите соответственно. Когда вы делаете простую интерполяцию строк в PHP:

"INSERT INTO foo VALUES ('$bar')"

где $bar является nullрезультат заканчивается как:

INSERT INTO foo VALUES ('')

MySQL видит это как пустую строку, которая не NULLтак что все в порядке.

Вы должны сделать что-то вроде этого:

$value = null;
if ($value === null) {
$bar = 'NULL';
} else {
$bar = "'$value'";
}
$query = "INSERT INTO foo VALUES ($bar)";

Здесь результат является одним из этих двух:

INSERT INTO foo VALUES (NULL)
INSERT INTO foo VALUES ('baz')

Тогда MySQL увидит null как NULL,

Однако, если вы собираетесь работать с такими длинами в PHP, вы, очевидно, можете просто не запускать запрос, если ваши значения пусты, вместо того, чтобы запустить запрос и позволить MySQL завершиться неудачей из-за ограничений.

Вам еще нужно узнать о внедрении SQL.

2

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

Пустая строка не NULL, То, что вы вставляете в свою таблицу — это пустая строка:

$sql = "INSERT INTO Person VALUES('$name','$dob','$tob','$city')";

если $name в PHP равно NULL, это приведет к появлению такой строки: INSERT INTO Person VALUES('','...','...','...')

Если вы хотите пройти NULL на MySQL, вы должны отправить NULLне "NULL" и не "",

$nameForMysql = is_null($name) ? "NULL" : "'$name'";
$sql = "INSERT INTO Person VALUES($nameForMysql,'$dob','$tob','$city')";
1

Так что просто сделай свой if...else более широкий:

if(!isset($_POST["name"]) || empty($_POST["name"])){ echo "Name is Required<br>";}
else {
$name = $_POST["name"];
$tob = $_POST["tob"];
$city = $_POST["city"];
$dd = $_POST["dd"];
$mm = $_POST["mm"];
$yyyy = $_POST["yyyy"];

$dob = "$yyyy-$mm-$dd";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

//Inserting Data
$sql = "INSERT INTO Person
VALUES('$name','$dob','$tob','$city')";
if ($conn->query($sql) === TRUE) {
echo "<br>New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
}
1

Укажите NULL там, где значения нет, sql обрабатывает ваши данные как пустую строку, а не как ноль, поэтому используйте код ниже

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<style>
label{text-align:left;
width:150px;
display:block;
float:left;
clear:right;
font-size:18;}

form {
width: 30%;
margin: 0 auto;
}
</style>
<label>Name:</label><input name=name autocomplete=off><br>
<label>Date of Birth:</label><input size=2 name=dd placeholder=dd> / <input size=2 name=mm placeholder=mm> / <input size=6 name=yyyy placeholder=yyyy><br>
<label>Time of Birth:</label><input name=tob placeholder="hh : mm : ss"><br>
<label>City:</label><input name=city><br><br>
<center><input type=submit value=Save></center>
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$servername = "localhost";
$username = "userame";
$password = "password";
$dbname = "myDB2";
if(empty($_POST["name"])){ echo "Name is Required<br>";
$name = "NULL";
}
else {
$name = $_POST["name"];
}
var_dump($name);
$tob = $_POST["tob"];
$city = $_POST["city"];
$dd = $_POST["dd"];
$mm = $_POST["mm"];
$yyyy = $_POST["yyyy"];

$dob = "$yyyy-$mm-$dd";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

//Inserting Data
$sql = "INSERT INTO Person
VALUES('$name','$dob','$tob','$city')";
if ($conn->query($sql) === TRUE) {
echo "<br>New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
}
?>

Надеюсь, это поможет вам

1
По вопросам рекламы [email protected]