在本教程中,您將學(xué)習(xí)如何使用PHP在MySQL表中插入記錄。
現(xiàn)在,您已經(jīng)了解了如何在MySQL中創(chuàng)建數(shù)據(jù)庫和表。在本教程中,您將學(xué)習(xí)如何執(zhí)行SQL查詢以將記錄插入表中。
INSERT INTO語句用于在數(shù)據(jù)庫表中插入新行。
讓我們使用帶有適當(dāng)值的INSERT INTO語句來執(zhí)行一個SQL查詢,之后我們將通過將該INSERT查詢傳遞給PHP mysqli_query()函數(shù)來執(zhí)行該INSERT查詢,以便在表中插入數(shù)據(jù)。 下面是一個示例,它通過指定first_name,last_name和email字段的值向persons表插入新行。
<?php
$link = mysqli_connect("localhost", "root", "", "demo");
// 檢查連接
if($link === false){
die("錯誤:無法連接。 " . mysqli_connect_error());
}
//嘗試執(zhí)行插入查詢
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if(mysqli_query($link, $sql)){
echo "記錄插入成功。";
} else{
echo "錯誤:無法執(zhí)行 $sql. " . mysqli_error($link);
}
//關(guān)閉連接
mysqli_close($link);
?><?php
$mysqli = new mysqli("localhost", "root", "", "demo");
//檢查連接
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
//嘗試執(zhí)行插入查詢
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if($mysqli->query($sql) === true){
echo "記錄插入成功。";
} else{
echo "錯誤:無法執(zhí)行 $sql. " . $mysqli->error;
}
//關(guān)閉連接
$mysqli->close();
?><?php
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
//將PDO錯誤模式設(shè)置為異常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
//嘗試執(zhí)行插入查詢
try{
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
$pdo->exec($sql);
echo "記錄插入成功。";
} catch(PDOException $e){
die("錯誤:無法執(zhí)行 $sql. " . $e->getMessage());
}
//關(guān)閉連接
unset($pdo);
?>如果您還記得上一章中的內(nèi)容,則id字段標(biāo)記有AUTO_INCREMENT標(biāo)志。該修飾符告訴MySQL,如果未指定該值,則通過將前一個值增加1來自動為該字段分配一個值。
您也可以一次通過單個插入查詢將多行插入到表中。為此,請在INSERT INTO語句中包括多個列值列表,其中每行的列值必須用括號括起來并用逗號分隔。
讓我們在persons表中再插入幾行,如下所示:
<?php
$link = mysqli_connect("localhost", "root", "", "demo");
//檢查連接
if($link === false){
die("錯誤:無法連接。 " . mysqli_connect_error());
}
//嘗試執(zhí)行插入查詢
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES
('John', 'Rambo', 'johnrambo@mail.com'),
('Clark', 'Kent', 'clarkkent@mail.com'),
('John', 'Carter', 'johncarter@mail.com'),
('Harry', 'Potter', 'harrypotter@mail.com')";
if(mysqli_query($link, $sql)){
echo "記錄添加成功。";
} else{
echo "錯誤:無法執(zhí)行 $sql. " . mysqli_error($link);
}
//關(guān)閉連接
mysqli_close($link);
?><?php
$mysqli = new mysqli("localhost", "root", "", "demo");
//檢查連接
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
//嘗試執(zhí)行插入查詢
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES
('John', 'Rambo', 'johnrambo@mail.com'),
('Clark', 'Kent', 'clarkkent@mail.com'),
('John', 'Carter', 'johncarter@mail.com'),
('Harry', 'Potter', 'harrypotter@mail.com')";
if($mysqli->query($sql) === true){
echo "記錄插入成功。";
} else{
echo "錯誤:無法執(zhí)行 $sql. " . $mysqli->error;
}
//關(guān)閉連接
$mysqli->close();
?><?php
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
//將PDO錯誤模式設(shè)置為異常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("錯誤:無法連接。 " . $e->getMessage());
}
//嘗試執(zhí)行插入查詢
try{
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES
('John', 'Rambo', 'johnrambo@mail.com'),
('Clark', 'Kent', 'clarkkent@mail.com'),
('John', 'Carter', 'johncarter@mail.com'),
('Harry', 'Potter', 'harrypotter@mail.com')";
$pdo->exec($sql);
echo "記錄插入成功。";
} catch(PDOException $e){
die("錯誤:無法執(zhí)行 $sql. " . $e->getMessage());
}
//關(guān)閉連接
unset($pdo);
?>現(xiàn)在,轉(zhuǎn)到phpMyAdmin(http://localhost/phpmyadmin/),并檢查演示數(shù)據(jù)庫中的人員表數(shù)據(jù)。您會發(fā)現(xiàn)ID列的值是通過將前一個ID的值增加1來自動分配的。
注意: SQL語句內(nèi)可以發(fā)生任意數(shù)量的換行符,但前提是任何換行符都不會破壞關(guān)鍵字,值,表達式等。
在上一節(jié)中,我們學(xué)習(xí)了如何從PHP腳本將數(shù)據(jù)插入數(shù)據(jù)庫?,F(xiàn)在,我們將看到如何將數(shù)據(jù)插入從HTML表單獲得的數(shù)據(jù)庫中。讓我們創(chuàng)建一個HTML表單,該表單可用于將新記錄插入人員表。
這是一個簡單的HTML表單,其中包含三個文本<input>字段和一個提交按鈕。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Add Record Form</title> </head> <form action="insert.php" method="post"> <p> <label for="firstName">First Name:</label> <input type="text" name="first_name" id="firstName"> </p> <p> <label for="lastName">Last Name:</label> <input type="text" name="last_name" id="lastName"> </p> <p> <label for="emailAddress">Email Address:</label> <input type="text" name="email" id="emailAddress"> </p> <input type="submit" value="Submit"> </form> </html>測試看看?/?
在上面的示例中,當(dāng)用戶單擊添加記錄HTML表單的提交按鈕時,表單數(shù)據(jù)將發(fā)送到“ insert.php”文件?!?insert.php”文件連接到MySQL數(shù)據(jù)庫服務(wù)器,使用PHP $_REQUEST變量檢索表單字段,最后執(zhí)行插入查詢以添加記錄。這是我們的“ insert.php”文件的完整代碼:
<?php
$link = mysqli_connect("localhost", "root", "", "demo");
//檢查連接
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
//為了安全起見,轉(zhuǎn)義用戶輸入
$first_name = mysqli_real_escape_string($link, $_REQUEST['first_name']);
$last_name = mysqli_real_escape_string($link, $_REQUEST['last_name']);
$email = mysqli_real_escape_string($link, $_REQUEST['email']);
//嘗試執(zhí)行插入查詢
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if(mysqli_query($link, $sql)){
echo "記錄添加成功。";
} else{
echo "錯誤:無法執(zhí)行 $sql. " . mysqli_error($link);
}
//關(guān)閉連接
mysqli_close($link);
?><?php
$mysqli = new mysqli("localhost", "root", "", "demo");
//檢查連接
if($mysqli === false){
die("錯誤:無法連接。 " . $mysqli->connect_error);
}
//為了安全,轉(zhuǎn)義用戶輸入
$first_name = $mysqli->real_escape_string($_REQUEST['first_name']);
$last_name = $mysqli->real_escape_string($_REQUEST['last_name']);
$email = $mysqli->real_escape_string($_REQUEST['email']);
//嘗試執(zhí)行插入查詢
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if($mysqli->query($sql) === true){
echo "記錄插入成功。";
} else{
echo "錯誤:無法執(zhí)行 $sql. " . $mysqli->error;
}
//關(guān)閉連接
$mysqli->close();
?><?php
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
//將PDO錯誤模式設(shè)置為異常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("錯誤:無法連接。" . $e->getMessage());
}
//嘗試執(zhí)行插入查詢
try{
//CREATE PREPARE語句
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES (:first_name, :last_name, :email)";
$stmt = $pdo->prepare($sql);
//將參數(shù)綁定到語句
$stmt->bindParam(':first_name', $_REQUEST['first_name']);
$stmt->bindParam(':last_name', $_REQUEST['last_name']);
$stmt->bindParam(':email', $_REQUEST['email']);
//執(zhí)行準(zhǔn)備好的語句
$stmt->execute();
echo "記錄插入成功。";
} catch(PDOException $e){
die("錯誤:無法執(zhí)行 $sql. " . $e->getMessage());
}
// Close connection
unset($pdo);
?>在下一章中,我們將擴展此插入查詢示例,并通過實現(xiàn)準(zhǔn)備好的語句來進一步提高安全性和性能,從而將其進一步發(fā)展。
注意:mysqli_real_escape_string()函數(shù)轉(zhuǎn)義字符串中的特殊字符并創(chuàng)建合法的SQL字符串以提供防止SQL注入的安全性。
這是在MySQL數(shù)據(jù)庫表中插入表單數(shù)據(jù)的非常基本的示例。您可以擴展此示例,使其更具交互性,方法是將驗證添加到用戶輸入中,然后再將其插入數(shù)據(jù)庫表。請查看有關(guān)PHP表單驗證的教程,以了解有關(guān)使用PHP 清理和驗證用戶輸入的更多信息。