如何在 PHP 中关联存储汽车信息与预订数据并实现数据库整合

花韻仙語

花韻仙語

2026-07-26

435人浏览

原创

如何在 PHP 中关联存储汽车信息与预订数据并实现数据库整合

本文介绍如何通过 mysql 关系型设计与 php 安全编码,将汽车详情(如品牌、型号)与用户预订信息(如租期、姓名)统一存入数据库,并确保数据可查、可管、可扩展。

本文介绍如何通过 mysql 关系型设计与 php 安全编码,将汽车详情(如品牌、型号)与用户预订信息(如租期、姓名)统一存入数据库,并确保数据可查、可管、可扩展。

要实现汽车租赁网站中“车辆信息”与“用户预订”数据的可靠整合,关键不在于简单拼接字段,而在于构建符合关系型数据库范式的结构化模型,并配合安全、可维护的 PHP 逻辑。

一、数据库关系设计(核心基础)

首先,在 MySQL 中创建两个规范表,通过外键建立强关联:

-- 汽车信息表(主表)
CREATE TABLE cars (
    id INT PRIMARY KEY AUTO_INCREMENT,
    brand VARCHAR(50) NOT NULL,
    model VARCHAR(50) NOT NULL,
    year YEAR,
    price_per_day DECIMAL(8,2),
    status ENUM('available', 'booked', 'maintenance') DEFAULT 'available'
);

-- 预订信息表(从表,关联 car_id)
CREATE TABLE bookings (
    id INT PRIMARY KEY AUTO_INCREMENT,
    car_id INT NOT NULL,
    customer_name VARCHAR(100) NOT NULL,
    phone VARCHAR(20),
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    total_amount DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (car_id) REFERENCES cars(id) ON DELETE CASCADE
);

关键点:bookings.car_id 是外键,指向 cars.id。这确保每条预订必然对应一辆真实存在的汽车,且在 phpMyAdmin 中可通过“浏览”或执行 SELECT * FROM bookings JOIN cars ON bookings.car_id = cars.id 直观查看完整关联记录。

二、PHP 安全写入流程(避免常见漏洞)

提交表单时,需分别处理车辆选择(如隐藏域传 car_id)与用户输入,并使用 PDO 预处理语句防止 SQL 注入:

PHP 8.5.5
PHP 8.5.5

PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

下载
<?php // 数据库连接(推荐使用 PDO)
$pdo = new PDO("mysql:host=localhost;dbname=car_rental;charset=utf8mb4", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        // 1. 获取并验证输入(示例:预订表单)
        $car_id = (int)$_POST['car_id']; // 强制转整型,防注入
        $customer_name = htmlspecialchars(trim($_POST['customer_name']));
        $start_date = date('Y-m-d', strtotime($_POST['start_date']));
        $end_date = date('Y-m-d', strtotime($_POST['end_date']));

        // 2. 预处理插入预订记录
        $stmt = $pdo->prepare("
            INSERT INTO bookings (car_id, customer_name, start_date, end_date, total_amount)
            VALUES (?, ?, ?, ?, ?)
        ");
        $total_amount = calculateTotal($car_id, $start_date, $end_date); // 自定义计算逻辑
        $stmt->execute([$car_id, $customer_name, $start_date, $end_date, $total_amount]);

        echo "✅ 预订成功!ID:" . $pdo->lastInsertId();
    } catch (PDOException $e) {
        error_log("Booking insert failed: " . $e->getMessage());
        echo "❌ 提交失败,请稍后重试。";
    }
}

// 示例:根据 car_id 和日期计算费用(需补充实际逻辑)
function calculateTotal($car_id, $start, $end) {
    global $pdo;
    $stmt = $pdo->prepare("SELECT price_per_day FROM cars WHERE id = ?");
    $stmt->execute([$car_id]);
    $price = $stmt->fetchColumn() ?: 0;
    $days = (strtotime($end) - strtotime($start)) / 86400 + 1;
    return round($price * $days, 2);
}
?>

⚠️ 重要安全实践

  • 永远不用 $_POST 直接拼接 SQL;
  • 对数字型 ID 使用 (int) 强制转换;
  • 对字符串使用 htmlspecialchars() 输出前转义(防止 XSS);
  • 所有数据库操作必须用 prepare() + execute() 实现参数化查询。

三、在 phpMyAdmin 中验证与查询

提交成功后,您可在 phpMyAdmin 中:

  • 点击 bookings 表 → “浏览”,查看新纪录;
  • 执行联合查询快速核对关联数据:
    SELECT 
        b.id AS booking_id,
        c.brand, c.model,
        b.customer_name,
        b.start_date, b.end_date,
        b.total_amount
    FROM bookings b
    JOIN cars c ON b.car_id = c.id
    ORDER BY b.created_at DESC
    LIMIT 20;

这样既保证了数据完整性,又便于后续扩展(如添加支付状态、司机信息等字段),同时为报表统计、后台管理打下坚实基础。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

5431

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

3588

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1786

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

2271

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

2782

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

1999

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

3028

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

2291

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

10927

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习