PHP实现医院
PHP实现医院挂号系统
医院挂号系统通常包含患者注册、医生排班、挂号预约、缴费管理等功能模块。以下是一个基于PHP和MySQL的简化实现方案:
数据库设计
创建核心数据表结构:

CREATE TABLE patients (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
gender ENUM('男','女') NOT NULL,
birth_date DATE,
phone VARCHAR(20) UNIQUE,
id_card VARCHAR(18) UNIQUE
);
CREATE TABLE departments (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT
);
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 schedules (
id INT AUTO_INCREMENT PRIMARY KEY,
doctor_id INT NOT NULL,
date DATE NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL,
max_appointments INT DEFAULT 20,
FOREIGN KEY (doctor_id) REFERENCES doctors(id)
);
CREATE TABLE appointments (
id INT AUTO_INCREMENT PRIMARY KEY,
patient_id INT NOT NULL,
schedule_id INT NOT NULL,
status ENUM('待支付','已预约','已取消','已完成') DEFAULT '待支付',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (patient_id) REFERENCES patients(id),
FOREIGN KEY (schedule_id) REFERENCES schedules(id)
);
核心功能实现
患者注册模块:
function registerPatient($name, $gender, $birthDate, $phone, $idCard) {
global $db;
$stmt = $db->prepare("INSERT INTO patients (name, gender, birth_date, phone, id_card) VALUES (?, ?, ?, ?, ?)");
$stmt->execute([$name, $gender, $birthDate, $phone, $idCard]);
return $db->lastInsertId();
}
医生排班管理:

function addDoctorSchedule($doctorId, $date, $startTime, $endTime, $maxAppointments) {
global $db;
$stmt = $db->prepare("INSERT INTO schedules (doctor_id, date, start_time, end_time, max_appointments) VALUES (?, ?, ?, ?, ?)");
return $stmt->execute([$doctorId, $date, $startTime, $endTime, $maxAppointments]);
}
挂号预约功能:
function makeAppointment($patientId, $scheduleId) {
global $db;
// 检查号源是否已满
$stmt = $db->prepare("SELECT COUNT(*) FROM appointments WHERE schedule_id = ? AND status IN ('待支付','已预约')");
$stmt->execute([$scheduleId]);
$current = $stmt->fetchColumn();
$stmt = $db->prepare("SELECT max_appointments FROM schedules WHERE id = ?");
$stmt->execute([$scheduleId]);
$max = $stmt->fetchColumn();
if ($current >= $max) {
return false; // 号源已满
}
$stmt = $db->prepare("INSERT INTO appointments (patient_id, schedule_id) VALUES (?, ?)");
return $stmt->execute([$patientId, $scheduleId]);
}
前端界面示例
挂号页面HTML片段:
<form action="make_appointment.php" method="post">
<div class="form-group">
<label>选择科室</label>
<select name="department" id="department" class="form-control">
<?php
$depts = $db->query("SELECT * FROM departments");
foreach ($depts as $dept) {
echo "<option value='{$dept['id']}'>{$dept['name']}</option>";
}
?>
</select>
</div>
<div class="form-group">
<label>选择医生</label>
<select name="doctor" id="doctor" class="form-control">
<option value="">-- 请先选择科室 --</option>
</select>
</div>
<div class="form-group">
<label>选择日期</label>
<input type="date" name="appointment_date" class="form-control">
</div>
<button type="submit" class="btn btn-primary">查询可预约时段</button>
</form>
系统安全考虑
- 使用预处理语句防止SQL注入
- 对敏感数据如身份证号进行加密存储
- 实现CSRF防护机制
- 对用户输入进行严格验证
- 重要操作记录日志
扩展功能建议
- 微信/支付宝支付接口集成
- 短信通知功能
- 电子病历系统对接
- 数据统计分析模块
- 移动端适配或APP开发
该系统需要根据具体医院需求进行调整和完善,建议采用MVC框架如Laravel或ThinkPHP进行开发,以提高代码可维护性和开发效率。






