使用的是大佬YMXuan的数据库
可以自己架设到本地,或者用免费的服务器跑也行,比如sevr00这类的,
PHP版本7.0以上即可。兼容手机端显示查询。
使用方法:将数据库文件drugs.db 和PHP文件放在同一目录即可。
我用作者原版数据库文件 可能后续他修改了,导致部分人提示
“数据库查询失败:“SQLSTATEIHY000] General error: 1 no such column: 批准文号”
<?php /** * 药品数据库查询系统 - 智能组合搜索版 * 使用说明: * 1. 将此文件保存为 index.php * 2. 将 drugs.db 放在同一目录 * 3. 支持空格分隔多关键词组合搜索 */ // 数据库配置 define('DB_PATH', __DIR__ . '/drugs.db'); // 错误处理 error_reporting(E_ALL); ini_set('display_errors', 0); // 处理查询请求 $results = []; $error = ''; $query_info = ''; $search_term = ''; $search_type = 'smart'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $search_term = trim($_POST['search_term'] ?? ''); $search_type = $_POST['search_type'] ?? 'smart'; if (!empty($search_term)) { try { $pdo = new PDO('sqlite:' . DB_PATH); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); // 智能搜索:支持空格分隔的多关键词组合 $keywords = array_filter(explode(' ', $search_term)); if ($search_type === 'smart' && count($keywords) > 1) { // 多关键词组合搜索:所有关键词都必须在某个字段中出现 $conditions = []; $params = []; foreach ($keywords as $idx => $keyword) { $param_name = "keyword{$idx}"; $conditions[] = "(通用名称 LIKE :{$param_name} OR 商品名称 LIKE :{$param_name} OR 生产企业 LIKE :{$param_name} OR 批准文号 LIKE :{$param_name} OR 相关疾病 LIKE :{$param_name} OR 适应症 LIKE :{$param_name})"; $params[$param_name] = "%{$keyword}%"; } $sql = "SELECT * FROM drug_info WHERE " . implode(' AND ', $conditions); $sql .= " ORDER BY 通用名称, 生产企业 LIMIT 100"; $query_info = "智能组合搜索(" . count($keywords) . " 个关键词):"" . $search_term . """; } else { // 单关键词或指定字段搜索 $keyword = $keywords[0]; switch ($search_type) { case 'generic_name': $sql = "SELECT * FROM drug_info WHERE 通用名称 LIKE :term ORDER BY 通用名称, 生产企业"; $query_info = "通用名称"; break; case 'trade_name': $sql = "SELECT * FROM drug_info WHERE 商品名称 LIKE :term ORDER BY 商品名称, 生产企业"; $query_info = "商品名称"; break; case 'manufacturer': $sql = "SELECT * FROM drug_info WHERE 生产企业 LIKE :term ORDER BY 生产企业, 通用名称"; $query_info = "生产企业"; break; case 'approval_number': $sql = "SELECT * FROM drug_info WHERE 批准文号 LIKE :term ORDER BY 批准文号"; $query_info = "批准文号"; break; default: // 智能模式单关键词:搜索所有主要字段 $sql = "SELECT * FROM drug_info WHERE 通用名称 LIKE :term OR 商品名称 LIKE :term OR 生产企业 LIKE :term OR 批准文号 LIKE :term OR 相关疾病 LIKE :term OR 适应症 LIKE :term ORDER BY 通用名称, 生产企业"; $query_info = "智能搜索"; } $sql .= " LIMIT 100"; $params = ['term' => "%{$keyword}%"]; $query_info .= " 包含 "{$keyword}""; } $stmt = $pdo->prepare($sql); $stmt->execute($params); $results = $stmt->fetchAll(); $query_info .= " 的药品,共找到 " . count($results) . " 条结果"; } catch (PDOException $e) { $error = "数据库查询失败: " . $e->getMessage(); } } else { $error = "请输入查询关键词"; } } // 获取数据库统计信息 $db_stats = ''; try { $pdo = new PDO('sqlite:' . DB_PATH); $stmt = $pdo->query("SELECT COUNT(*) as total FROM drug_info"); $total = $stmt->fetch()['total']; $db_stats = "数据库共收录 {$total} 条药品信息"; } catch (PDOException $e) { $db_stats = "无法连接数据库"; } // 辅助函数:安全输出 function safe_output($value) { return !empty($value) && $value !== '-' ? nl2br(htmlspecialchars($value)) : '<span style="color: #bbb;">暂无</span>'; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>药品数据库查询系统</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; padding: 20px; } .container { max-width: 1400px; margin: 0 auto; } .header { background: white; border-radius: 10px; padding: 25px 30px; margin-bottom: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); } h1 { color: #667eea; margin-bottom: 8px; font-size: 26px; } .db-stats { color: #666; font-size: 14px; } .search-box { background: white; border-radius: 10px; padding: 25px 30px; margin-bottom: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); } .search-hint { color: #667eea; font-size: 13px; margin-bottom: 15px; padding: 10px; background: #f0f4ff; border-radius: 5px; border-left: 3px solid #667eea; } .search-form { display: flex; gap: 10px; flex-wrap: wrap; } .search-type { padding: 12px; border: 2px solid #e0e0e0; border-radius: 5px; font-size: 15px; flex: 0 0 140px; background: white; } .search-input { padding: 12px; border: 2px solid #e0e0e0; border-radius: 5px; font-size: 15px; flex: 1; min-width: 250px; } .search-input:focus { outline: none; border-color: #667eea; } .search-btn { padding: 12px 30px; background: #667eea; color: white; border: none; border-radius: 5px; font-size: 15px; cursor: pointer; transition: background 0.3s; font-weight: 500; } .search-btn:hover { background: #5568d3; } .message { background: white; border-radius: 10px; padding: 15px 20px; margin-bottom: 20px; box-shadow: 0 5px 15px rgba(0,0,0,0.1); } .error { background: #fee; color: #c33; border-left: 4px solid #c33; } .info { background: #e7f3ff; color: #0066cc; border-left: 4px solid #0066cc; } .results { background: white; border-radius: 10px; padding: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); } .drug-card { border: 1px solid #ddd; border-radius: 8px; margin-bottom: 20px; overflow: hidden; transition: all 0.3s; background: #fafafa; } .drug-card:hover { border-color: #667eea; box-shadow: 0 4px 15px rgba(102, 126, 234, 0.15); } /* 核心信息区 */ .drug-header { background: white; padding: 20px 25px; border-bottom: 2px solid #f0f0f0; } .drug-title-row { display: flex; align-items: baseline; gap: 15px; margin-bottom: 15px; flex-wrap: wrap; } .drug-generic-name { font-size: 22px; font-weight: bold; color: #333; } .drug-trade-name { font-size: 16px; color: #667eea; font-weight: 500; } .drug-badges { display: flex; gap: 8px; flex-wrap: wrap; } .badge { display: inline-block; padding: 4px 12px; background: #f0f0f0; border-radius: 4px; font-size: 12px; color: #666; } .badge.primary { background: #e7f3ff; color: #0066cc; } /* 基础信息网格 */ .basic-info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; padding: 20px 25px; background: white; } .info-row { display: flex; gap: 10px; font-size: 14px; line-height: 1.6; } .info-label { font-weight: 600; color: #555; min-width: 80px; flex-shrink: 0; } .info-value { color: #333; flex: 1; } /* 详细说明区 */ .drug-details { padding: 20px 25px; background: white; } .detail-block { margin-bottom: 20px; padding-bottom: 20px; border-bottom: 1px solid #f0f0f0; } .detail-block:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; } .detail-title { font-weight: bold; color: #667eea; margin-bottom: 8px; font-size: 15px; } .detail-content { color: #555; line-height: 1.8; font-size: 14px; } .section-divider { height: 2px; background: #f0f0f0; margin: 0; } .no-results { text-align: center; padding: 40px; color: #999; font-size: 16px; } @media (max-width: 768px) { .basic-info-grid { grid-template-columns: 1fr; } } @media print { body { background: white; } .search-box, .header { display: none; } } </style> </head> <body> <div> <div> <h1>药品数据库查询系统</h1> <div><?php echo htmlspecialchars($db_stats); ?></div> </div> <div> <div> 💡 <strong>智能搜索提示:</strong>输入多个关键词用空格分隔,如 "阿莫西林 进口"、"布洛芬 儿童",系统将自动组合匹配 </div> <form method="POST"> <select name="search_type"> <option value="smart" <?php echo $search_type === 'smart' ? 'selected' : ''; ?>>智能搜索</option> <option value="generic_name" <?php echo $search_type === 'generic_name' ? 'selected' : ''; ?>>通用名称</option> <option value="trade_name" <?php echo $search_type === 'trade_name' ? 'selected' : ''; ?>>商品名称</option> <option value="manufacturer" <?php echo $search_type === 'manufacturer' ? 'selected' : ''; ?>>生产企业</option> <option value="approval_number" <?php echo $search_type === 'approval_number' ? 'selected' : ''; ?>>批准文号</option> </select> <input type="text" name="search_term" placeholder="如:阿莫西林 进口" value="<?php echo htmlspecialchars($search_term); ?>" required> <button type="submit">🔍 查询</button> </form> </div> <?php if ($error): ?> <div class="message error"> ❌ <?php echo htmlspecialchars($error); ?> </div> <?php endif; ?> <?php if ($query_info): ?> <div class="message info"> ℹ️ <?php echo htmlspecialchars($query_info); ?> </div> <?php endif; ?> <?php if (!empty($results)): ?> <div> <?php foreach ($results as $drug): ?> <div> <!-- 核心信息区 --> <div> <div> <span> <?php echo htmlspecialchars($drug['通用名称'] ?? '未知药品'); ?> </span> <?php if (!empty($drug['商品名称'])): ?> <span> [<?php echo htmlspecialchars($drug['商品名称']); ?>] </span> <?php endif; ?> </div> <div> <?php if (!empty($drug['药品性质'])): ?> <span class="badge primary"><?php echo htmlspecialchars($drug['药品性质']); ?></span> <?php endif; ?> <?php if (!empty($drug['药品分类'])): ?> <span><?php echo htmlspecialchars($drug['药品分类']); ?></span> <?php endif; ?> </div> </div> <!-- 基础信息网格 --> <div> <div> <span>生产企业</span> <span><?php echo safe_output($drug['生产企业']); ?></span> </div> <div> <span>批准文号</span> <span><?php echo safe_output($drug['批准文号']); ?></span> </div> <div> <span>规格</span> <span><?php echo safe_output($drug['规格']); ?></span> </div> <div> <span>汉语拼音</span> <span><?php echo safe_output($drug['汉语拼音']); ?></span> </div> <div> <span>贮藏</span> <span><?php echo safe_output($drug['贮藏']); ?></span> </div> <div> <span>有效期</span> <span><?php echo safe_output($drug['有效期']); ?></span> </div> <?php if (!empty($drug['相关疾病'])): ?> <div> <span>相关疾病</span> <span><?php echo safe_output($drug['相关疾病']); ?></span> </div> <?php endif; ?> <?php if (!empty($drug['性状'])): ?> <div> <span>性状</span> <span><?php echo safe_output($drug['性状']); ?></span> </div> <?php endif; ?> </div> <div></div> <!-- 详细说明区 --> <div> <?php if (!empty($drug['主要成份'])): ?> <div> <div>主要成份</div> <div><?php echo safe_output($drug['主要成份']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['适应症'])): ?> <div> <div>适应症</div> <div><?php echo safe_output($drug['适应症']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['用法用量'])): ?> <div> <div>用法用量</div> <div><?php echo safe_output($drug['用法用量']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['不良反应'])): ?> <div> <div>不良反应</div> <div><?php echo safe_output($drug['不良反应']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['禁忌'])): ?> <div> <div>禁忌</div> <div><?php echo safe_output($drug['禁忌']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['注意事项'])): ?> <div> <div>注意事项</div> <div><?php echo safe_output($drug['注意事项']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['孕妇及哺乳期妇女用药'])): ?> <div> <div>孕妇及哺乳期妇女用药</div> <div><?php echo safe_output($drug['孕妇及哺乳期妇女用药']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['儿童用药'])): ?> <div> <div>儿童用药</div> <div><?php echo safe_output($drug['儿童用药']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['老人用药'])): ?> <div> <div>老人用药</div> <div><?php echo safe_output($drug['老人用药']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['药物相互作用'])): ?> <div> <div>药物相互作用</div> <div><?php echo safe_output($drug['药物相互作用']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['药理毒理'])): ?> <div> <div>药理毒理</div> <div><?php echo safe_output($drug['药理毒理']); ?></div> </div> <?php endif; ?> <?php if (!empty($drug['药代动力学'])): ?> <div> <div>药代动力学</div> <div><?php echo safe_output($drug['药代动力学']); ?></div> </div> <?php endif; ?> </div> </div> <?php endforeach; ?> </div> <?php elseif ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($error)): ?> <div> <div>😕 未找到符合条件的药品信息</div> </div> <?php endif; ?> </div> </body> </html>