簡體   English   中英

如何在PHP中使用MySQL NOT NULL?

[英]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數據類型和約束。


盡管

  • Name列的NOT NULL約束,以及

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

當我插入提交表單而未在表單的“名稱輸入”中輸入任何值時,出現以下消息(根據代碼)

Name is Required
NULL
New record created successfully

和我的數據庫輸出像:

位於Screen0

在這里,您可以看到var_dump($name)表示$nameNULL但MySQL數據庫仍在Name Column中接受該值!


所以,我的問題是, NOT NULL的用途是什么? 如何在PHP中使用MysQL NOT NULL 在表格幫助下插入數據?

您需要適當地將PHP的null轉換為SQL的NULL類型。 在PHP中進行簡單的字符串插值時:

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

其中$barnull ,結果最終為:

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注入的知識

空字符串不是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')";

因此,只要使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();
}
?>

希望這對您有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM