PHP MySQL 插入数据

在本教程中,您将学习如何使用PHP在MySQL表中插入记录。

将数据插入MySQL数据库表

现在,您已经了解了如何在MySQL中创建数据库和表。在本教程中,您将学习如何执行SQL查询以将记录插入表中。

INSERT INTO语句用于在数据库表中插入新行。

让我们使用带有适当值的INSERT INTO语句来执行一个SQL查询,之后我们将通过将该INSERT查询传递给PHP mysqli_query()函数来执行该INSERT查询,以便在表中插入数据。 下面是一个示例,它通过指定first_namelast_nameemail字段的值向persons表插入新行。

示例:面向过程方式

<?php
$link = mysqli_connect("localhost", "root", "", "demo");
 
// 检查连接
if($link === false){
    die("错误:无法连接。 " . mysqli_connect_error());
}
 
//尝试执行插入查询
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if(mysqli_query($link, $sql)){
    echo "记录插入成功。";
} else{
    echo "错误:无法执行 $sql. " . mysqli_error($link);
}
 
//关闭连接
mysqli_close($link);
?>

示例:面向对象方式

<?php
$mysqli = new mysqli("localhost", "root", "", "demo");
 
//检查连接
if($mysqli === false){
    die("ERROR: Could not connect. " . $mysqli->connect_error);
}
 
//尝试执行插入查询
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if($mysqli->query($sql) === true){
    echo "记录插入成功。";
} else{
    echo "错误:无法执行 $sql. " . $mysqli->error;
}
 
//关闭连接
$mysqli->close();
?>

示例:PDO方式

<?php
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    //将PDO错误模式设置为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Could not connect. " . $e->getMessage());
}
 
//尝试执行插入查询
try{
    $sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";    
    $pdo->exec($sql);
    echo "记录插入成功。";
} catch(PDOException $e){
    die("错误:无法执行 $sql. " . $e->getMessage());
}
 
//关闭连接
unset($pdo);
?>

如果您还记得上一章中的内容,则id字段标记有AUTO_INCREMENT标志。该修饰符告诉MySQL,如果未指定该值,则通过将前一个值增加1来自动为该字段分配一个值。

在表中插入多行

您也可以一次通过单个插入查询将多行插入到表中。为此,请在INSERT INTO语句中包括多个列值列表,其中每行的列值必须用括号括起来并用逗号分隔。

让我们在persons表中再插入几行,如下所示:

示例:面向过程方式

<?php
$link = mysqli_connect("localhost", "root", "", "demo");
 
//检查连接
if($link === false){
    die("错误:无法连接。 " . mysqli_connect_error());
}
 
//尝试执行插入查询
$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 "错误:无法执行 $sql. " . mysqli_error($link);
}
 
//关闭连接
mysqli_close($link);
?>

示例:面向对象方式

<?php
$mysqli = new mysqli("localhost", "root", "", "demo");
 
//检查连接
if($mysqli === false){
    die("ERROR: Could not connect. " . $mysqli->connect_error);
}
 
//尝试执行插入查询
$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 "错误:无法执行 $sql. " . $mysqli->error;
}
 
//关闭连接
$mysqli->close();
?>

示例:PDO方式

<?php
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    //将PDO错误模式设置为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("错误:无法连接。 " . $e->getMessage());
}
 
//尝试执行插入查询
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("错误:无法执行 $sql. " . $e->getMessage());
}
 
//关闭连接
unset($pdo);
?>

现在,转到phpMyAdmin(http://localhost/phpmyadmin/),并检查演示数据库中的人员表数据。您会发现ID列的值是通过将前一个ID的值增加1来自动分配的。

注意: SQL语句内可以发生任意数量的换行符,但前提是任何换行符都不会破坏关键字,值,表达式等。

从HTML表单将数据插入数据库

在上一节中,我们学习了如何从PHP脚本将数据插入数据库。现在,我们将看到如何将数据插入从HTML表单获得的数据库中。让我们创建一个HTML表单,该表单可用于将新记录插入人员表。

步骤1:建立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>
测试看看

步骤2:检索和插入表单数据

在上面的示例中,当用户单击添加记录HTML表单的提交按钮时,表单数据将发送到“ insert.php”文件。“ insert.php”文件连接到MySQL数据库服务器,使用PHP $_REQUEST变量检索表单字段,最后执行插入查询以添加记录。这是我们的“ insert.php”文件的完整代码:

示例:面向过程方式

<?php
$link = mysqli_connect("localhost", "root", "", "demo");
 
//检查连接
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}
 
//为了安全起见,转义用户输入
$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']);
 
//尝试执行插入查询
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if(mysqli_query($link, $sql)){
    echo "记录添加成功。";
} else{
    echo "错误:无法执行 $sql. " . mysqli_error($link);
}
 
//关闭连接
mysqli_close($link);
?>

示例:面向对象方式

<?php
$mysqli = new mysqli("localhost", "root", "", "demo");
 
//检查连接
if($mysqli === false){
    die("错误:无法连接。 " . $mysqli->connect_error);
}
 
//为了安全,转义用户输入
$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']);
 
//尝试执行插入查询
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if($mysqli->query($sql) === true){
    echo "记录插入成功。";
} else{
    echo "错误:无法执行 $sql. " . $mysqli->error;
}
 
//关闭连接
$mysqli->close();
?>

示例:PDO方式

<?php
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    //将PDO错误模式设置为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("错误:无法连接。" . $e->getMessage());
}
 
//尝试执行插入查询
try{
    //CREATE PREPARE语句
    $sql = "INSERT INTO persons (first_name, last_name, email) VALUES (:first_name, :last_name, :email)";
    $stmt = $pdo->prepare($sql);
    
    //将参数绑定到语句
    $stmt->bindParam(':first_name', $_REQUEST['first_name']);
    $stmt->bindParam(':last_name', $_REQUEST['last_name']);
    $stmt->bindParam(':email', $_REQUEST['email']);
    
    //执行准备好的语句
    $stmt->execute();
    echo "记录插入成功。";
} catch(PDOException $e){
    die("错误:无法执行 $sql. " . $e->getMessage());
}
 
// Close connection
unset($pdo);
?>

在下一章中,我们将扩展此插入查询示例,并通过实现准备好的语句来进一步提高安全性和性能,从而将其进一步发展。

注意:mysqli_real_escape_string()函数转义字符串中的特殊字符并创建合法的SQL字符串以提供防止SQL注入的安全性。

这是在MySQL数据库表中插入表单数据的非常基本的示例。您可以扩展此示例,使其更具交互性,方法是将验证添加到用户输入中,然后再将其插入数据库表。请查看有关PHP表单验证的教程,以了解有关使用PHP 清理和验证用户输入的更多信息。