php实现医院挂号
PHP实现医院挂号系统
数据库设计
创建数据库表结构是挂号系统的核心部分。主要需要以下表:
- 患者表(patients):存储患者基本信息
- 医生表(doctors):存储医生信息
- 科室表(departments):存储医院科室信息
- 排班表(schedules):存储医生排班信息
- 挂号表(registrations):存储挂号记录
CREATE TABLE patients (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
gender ENUM('男','女') NOT NULL,
birth_date DATE,
phone VARCHAR(20) NOT NULL,
id_card VARCHAR(18) NOT NULL UNIQUE
);
CREATE TABLE doctors (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
department_id INT,
title VARCHAR(50),
FOREIGN KEY (department_id) REFERENCES departments(id)
);
CREATE TABLE departments (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT
);
CREATE TABLE schedules (
id INT AUTO_INCREMENT PRIMARY KEY,
doctor_id INT NOT NULL,
date DATE NOT NULL,
time_slot ENUM('上午','下午','晚上') NOT NULL,
max_patients INT DEFAULT 30,
FOREIGN KEY (doctor_id) REFERENCES doctors(id)
);
CREATE TABLE registrations (
id INT AUTO_INCREMENT PRIMARY KEY,
patient_id INT NOT NULL,
schedule_id INT NOT NULL,
registration_time DATETIME DEFAULT CURRENT_TIMESTAMP,
status ENUM('待就诊','已就诊','已取消') DEFAULT '待就诊',
FOREIGN KEY (patient_id) REFERENCES patients(id),
FOREIGN KEY (schedule_id) REFERENCES schedules(id)
);
患者注册与登录
实现患者注册和登录功能,使用PHP和MySQLi:
// 数据库连接
$conn = new mysqli('localhost', 'username', 'password', 'hospital');
// 患者注册
function registerPatient($name, $gender, $birth_date, $phone, $id_card, $password) {
global $conn;
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$stmt = $conn->prepare("INSERT INTO patients (name, gender, birth_date, phone, id_card, password) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssss", $name, $gender, $birth_date, $phone, $id_card, $hashed_password);
return $stmt->execute();
}
// 患者登录
function loginPatient($id_card, $password) {
global $conn;
$stmt = $conn->prepare("SELECT id, password FROM patients WHERE id_card = ?");
$stmt->bind_param("s", $id_card);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows == 1) {
$patient = $result->fetch_assoc();
if(password_verify($password, $patient['password'])) {
return $patient['id'];
}
}
return false;
}
挂号功能实现
实现患者挂号功能,包括查询可挂号医生和提交挂号:

// 查询可挂号医生排班
function getAvailableSchedules($department_id = null, $date = null) {
global $conn;
$query = "SELECT s.*, d.name AS doctor_name, dep.name AS department_name
FROM schedules s
JOIN doctors d ON s.doctor_id = d.id
JOIN departments dep ON d.department_id = dep.id
WHERE s.date >= CURDATE()";
if($department_id) {
$query .= " AND d.department_id = $department_id";
}
if($date) {
$query .= " AND s.date = '$date'";
}
$query .= " AND (SELECT COUNT(*) FROM registrations r WHERE r.schedule_id = s.id AND r.status != '已取消') < s.max_patients
ORDER BY s.date, s.time_slot";
$result = $conn->query($query);
return $result->fetch_all(MYSQLI_ASSOC);
}
// 提交挂号
function registerAppointment($patient_id, $schedule_id) {
global $conn;
$stmt = $conn->prepare("INSERT INTO registrations (patient_id, schedule_id) VALUES (?, ?)");
$stmt->bind_param("ii", $patient_id, $schedule_id);
return $stmt->execute();
}
挂号记录查询
实现患者查询自己的挂号记录:
// 查询患者挂号记录
function getPatientRegistrations($patient_id) {
global $conn;
$stmt = $conn->prepare("SELECT r.*, d.name AS doctor_name, dep.name AS department_name, s.date, s.time_slot
FROM registrations r
JOIN schedules s ON r.schedule_id = s.id
JOIN doctors d ON s.doctor_id = d.id
JOIN departments dep ON d.department_id = dep.id
WHERE r.patient_id = ?
ORDER BY s.date DESC");
$stmt->bind_param("i", $patient_id);
$stmt->execute();
$result = $stmt->get_result();
return $result->fetch_all(MYSQLI_ASSOC);
}
取消挂号功能
实现患者取消挂号功能:

// 取消挂号
function cancelRegistration($registration_id) {
global $conn;
$stmt = $conn->prepare("UPDATE registrations SET status = '已取消' WHERE id = ? AND status = '待就诊'");
$stmt->bind_param("i", $registration_id);
return $stmt->execute();
}
安全措施
为确保系统安全,需要实施以下措施:
- 使用预处理语句防止SQL注入
- 密码使用password_hash()加密存储
- 敏感操作需要验证患者身份
- 重要数据传输使用HTTPS
- 实现CSRF防护
前端界面建议
虽然PHP主要负责后端逻辑,但前端界面设计也很重要:
- 患者注册/登录页面
- 科室和医生选择页面
- 挂号时间选择页面
- 个人中心(查看/取消挂号)
- 响应式设计适配移动设备
系统扩展功能
基础功能实现后,可考虑扩展以下功能:
- 在线支付挂号费
- 电子病历系统集成
- 检查报告查询
- 医生工作站
- 智能分诊系统
- 微信/支付宝小程序接入
实现医院挂号系统需要综合考虑数据库设计、业务逻辑、用户界面和安全性等多个方面。以上代码提供了核心功能的实现框架,实际开发中还需要根据具体需求进行调整和完善。






