C语言动态网页技术实战笔记

2020-03-13 13:54:51
## 一、创建数据库并添加测试数据 > 讲师:邹义良 ```sql create database site; use site; CREATE TABLE `article` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL DEFAULT '', `content` longtext, `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `article` (`id`, `title`, `content`, `created_at`) VALUES (1, '今后三天广东各地气温逐渐回升', '中国天气网讯 预计今天(20日)开始,广东各地天气以多云为主,气温逐渐回升,但早晚天气依然较凉,外出注意防寒保暖。\n\n昨天,广东各地天气以多云间晴为主,午后多地气温攀升至20℃以上。\n\n今后三天,广东各地气温将逐渐回升,暖意回归。预计今天,广东全省大部多云。早晨最低气温:粤北5℃~9℃,珠江三角洲、粤东9℃~12℃,粤西13℃~16℃。白天最高气温:粤北、珠三角中北部、粤东19℃~22℃,珠三角南部、粤西21℃~23℃。', '2020-02-20 16:34:44'), (2, '广东首批5吨 “北薯南种” 马铃薯抢收援鄂', '2月19日上午,湛江市遂溪县。原计划2月底收获的“粤黑合作稻稻薯项目”马铃薯,在即将满百日之时提前抢收,为的是保障驰援奋战在湖北疫情地区一线的医护人员果蔬供应。这场抢收首批5吨,一天后将驰援武汉!', '2020-02-20 16:35:10'), (3, '各式各样网课接踵上线,如何选?北京市教委给出建议', '北京教育系统延期开学,各式各样的网课接踵上线,其中既有市、区教育部门和学校提供的在线服务,也有社会培训机构推出的在线学习资源。如何合理选课?市教委通过官方微信给出“指导”。', '2020-02-08 19:52:46'); ``` ## 二、主程序代码 vi news.c ```c #include <stdio.h> #include <stdlib.h> #include <mysql.h> void db(){ char *server = "127.0.0.1"; // 不要用localhost,用127.0.0.1 char *user = "root"; char *password = "123456"; char *database = "site"; MYSQL *conn = mysql_init(NULL); // https://dev.mysql.com/doc/refman/8.0/en/mysql-real-connect.html // MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag) if (!mysql_real_connect(conn, server, user, password, database, 3306, NULL, 0)){ printf("%s\n", mysql_error(conn)); exit(1); } // 解决中文乱码 mysql_query(conn, "set names utf8mb4"); if (mysql_query(conn, "SELECT * FROM article")){ printf("%s\n", mysql_error(conn)); exit(1); } // 使用查询的结果集 MYSQL_RES *result = mysql_use_result(conn); // 循环输出所有SQL查询得到的信息 MYSQL_ROW row; while (row = mysql_fetch_row(result)){ printf("<li><a href='#'>[%s] %s</a></li>", row[0], row[1]); printf("\n"); } // 释放资源 mysql_free_result(result); mysql_close(conn); } void html(){ printf("Content-Type: text/html\n\n"); char *header = "<!doctype html>" \ "<html>" \ "<head>" \ "<meta name='viewport' content='width=device-width, initial-scale=1'>" \ "<meta charset='UTF-8'>" \ "<title>新闻中心</title>" \ "</head>" \ "<body>"; printf("%s\n", header); printf("<style>" \ ".title{font-weight:bold;font-size:18px;margin-top:5px;margin-bottom:5px;line-height:40px;color:#fff;background-color:#96b97d;text-align:center;}" \ "a{text-decoration: none;color:#666;}" \ "ul,li{list-style: none;}" \ "</style>"); printf("<div class='title'>国内新闻</div>"); db(); printf( "</body></html>"); } int main(){ html(); return 0; } ``` ## 三、编译 ```shell $ sudo apt install -y libmysqlclient-dev # 不安装找不到<mysql.h>头文件 $ gcc news.c -o news.cgi -I /usr/include/mysql -L /usr/lib/mysql -lmysqlclient ```