如何将 MySQL NOT NULL 与 PHP 一起使用?
How can I use MySQL NOT NULL with PHP?
我已经使用 PHP 在 MySQL 数据库中插入值(示例代码如下):
<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();
}
?>
AND 列 Name
设置为 varchar(60) NOT NULL UNIQUE
数据类型和约束。
尽管
NOT NULL
Name
列的约束,以及
if(empty($_POST["name"])){ echo "Name is Required";}
else {
$name = $_POST["name"];
}
当我插入提交表单而没有在表单的名称输入中输入任何值时,我收到以下消息(根据代码)
名字是必需的
无效的
新记录创建成功
我的数据库输出如下:
在这里你可以看到 var_dump($name)
说 $name
是 NULL
但仍然 MySQL 数据库接受这个值 Name
专栏!
所以,我的问题是 NOT NULL
或 的用途是什么 我如何将 MysQL NOT NULL
与 PHP 一起使用? 用于在表单帮助下插入数据?
您需要将 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 失败,因为限制。
您还需要learn about SQL injection。
空字符串不是NULL
。您在 table 中插入的是一个空字符串:
$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')";
所以只需让您的 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();
}
在没有值的地方指定 NULL,sql 会将您的数据视为空字符串而不是 null,因此请使用下面的代码
<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();
}
?>
希望对您有所帮助
我已经使用 PHP 在 MySQL 数据库中插入值(示例代码如下):
<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();
}
?>
AND 列 Name
设置为 varchar(60) NOT NULL UNIQUE
数据类型和约束。
尽管
NOT NULL
Name
列的约束,以及if(empty($_POST["name"])){ echo "Name is Required";} else { $name = $_POST["name"]; }
当我插入提交表单而没有在表单的名称输入中输入任何值时,我收到以下消息(根据代码)
名字是必需的 无效的 新记录创建成功
我的数据库输出如下:
在这里你可以看到 var_dump($name)
说 $name
是 NULL
但仍然 MySQL 数据库接受这个值 Name
专栏!
所以,我的问题是 NOT NULL
或 的用途是什么 我如何将 MysQL NOT NULL
与 PHP 一起使用? 用于在表单帮助下插入数据?
您需要将 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 失败,因为限制。
您还需要learn about SQL injection。
空字符串不是NULL
。您在 table 中插入的是一个空字符串:
$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')";
所以只需让您的 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();
}
在没有值的地方指定 NULL,sql 会将您的数据视为空字符串而不是 null,因此请使用下面的代码
<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();
}
?>
希望对您有所帮助