有时为了性能,我们会直接用C语言来开发相关的模块,尤其在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口,然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译。 if defined(_WIN32) || defined(_WIN64)为了支持windows平台上的编译#includewindows.h#endif#includestdio.h#includestdlib.h #includemysql.h 我的机器上该文件在/usr/local/include/mysql下 定义MySQL数据库操作的宏,也可以不定义留着后面直接写进代码 defineSELECT_QUERYselectusernamefromtbb_userwhereuserid=%dintmain(intargc,char**argv)char**argv相当于char*argv[]{MYSQL mysql,*sock;定义数据库连接的句柄,它被用于几乎所有的MySQL函数 MYSQL_RES *res;查询结果集,结构类型 MYSQL_FIELD *fd ;包含字段信息的结构 MYSQL_ROW row ;存放一行查询结果的字符串数组 char qbuf[160];存放查询sql语句字符串 if(argc!=2){//检查输入参数 fprintf(stderr,usage:mysql_selectuserid\n\n);exit(1);}mysql_init(mysql);if(!(sock=mysql_real_connect (mysql,localhost,dbuser,dbpwd,9tmd_bbs_utf8,0,NULL,0))){ fprintf(stderr,Couldn'tconnecttoengine!\n%s\n\n,mysql_error(mysql));perror();exit(1);}sprintf(qbuf,SELECT_QUERY,atoi(argv[1])); if(mysql_query(sock,qbuf)){ fprintf(stderr,Queryfailed(%s)\n,mysql_error(sock));exit(1);}if(!(res=mysql_store_result(sock))){fprintf(stderr,Couldn'tgetresultfrom%s\n,mysql_error(sock));exit(1);}printf(numberoffieldsreturned:%d\n,mysql_num_fields(res));while(row=mysql_fetch_row(res)){printf(Theruserid#%d'susernameis:%s\n,atoi(argv[1]),(((row[0]==NULL)(!strlen(row[0])))?NULL:row[0])); puts(queryok!\n);}mysql_free_result(res); mysql_close(sock);exit(0);return0;为了兼容大部分的编译器加入此行} 编译的时候,使用下面的命令 gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况运行的时候,执行下面的命令 ./mysql_select 1 将返回如下结果: numberoffieldsreturned:1 Theruserid#1'susernameis:Michaelqueryok!上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档源码天空 ,各个函数都有详细说明,有时间我整理一份常用的API说明出来。
成都创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为郁南企业提供专业的成都网站设计、网站制作,郁南网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
1 import java.sql.Connection;
2 import java.sql.DriverManager;
3 import java.sql.ResultSet;
4 import java.sql.SQLException;
5 import java.sql.Statement;
6
7 public class CreateDataSource {
8
9 /**
10 * @param args
11 */
12 public static void main(String[] args) {
13 // TODO Auto-generated method stub
14 String database = "test2";
15 new CreateDataSource().getConn(database);
16 }
17
18 String mysqlDriver = "com.mysql.jdbc.Driver";
19 String url = "jdbc:mysql://localhost:3306/test1";
20 String newUrl = "jdbc:mysql://localhost:3306/";
21 String username = "root";
22 String password = "root";
23 Connection conn = null;
24 Connection newConn = null;
25
26 public Connection getConn(String database) {
27
28 try {
29 Class.forName(mysqlDriver);
30 } catch (ClassNotFoundException e) {
31 // TODO Auto-generated catch block
32 e.printStackTrace();
33 }
34 try {
35 String tableSql = "create table t_user (username varchar(50) not null primary key,"
36 + "password varchar(20) not null ); ";
37 String databaseSql = "create database " + database;
38
39 conn = DriverManager.getConnection(url, username, password);
40 Statement smt = conn.createStatement();
41 if (conn != null) {
42 System.out.println("数据库连接成功!");
43
44 smt.executeUpdate(databaseSql);
45
46 newConn = DriverManager.getConnection(newUrl + database,
47 username, password);
48 if (newConn != null) {
49 System.out.println("已经连接到新创建的数据库:" + database);
50
51 Statement newSmt = newConn.createStatement();
52 int i = newSmt.executeUpdate(tableSql);//DDL语句返回值为0;
53 if (i == 0) {
54 System.out.println(tableSql + "表已经创建成功!");
55 }
56 }
57 }
58
59 } catch (SQLException e1) {
60 // TODO Auto-generated catch block
61 e1.printStackTrace();
62 }
63 return conn;
64 }
65 }
1、首先,新建一个php_mysql.php的文件
2、其次,查看mysql服务是否打开,或者客户端的mysql能够正常打开。
鼠标右键电脑--》管理--》服务和应用程序--》服务--》找到mysql服务,看看是不是启用状态。
看看能不能打开客户端。
3、如果上面的可以了,那么就进入正题了,php连接mysql代码实例。
4、最后运行这个文件,看看运行结果吧。
?php
$con = mysql_connect("localhost:3306","root","");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
$result = mysql_query("SELECT * FROM user");
echo "table border='1'
tr
thUsername/th
thPassword/th
/tr";
while($row = mysql_fetch_array($result)) {
echo "tr";
echo "td" . $row['username'] . "/td";
echo "td" . $row['password'] . "/td";
echo "/tr";
}
echo "/table";
mysql_close($con);
?
从服务器中获取用户所有信息(SQL SELECT语句)并以表格形式出现
?php
$con = mysql_connect("localhost","root","");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
mysql_query("DELETE FROM user WHERE username = '$_POST[username]'");
mysql_close($con);
?
删除该用户所有信息delete.php
?php
$con = mysql_connect("localhost:3306","root","");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
$sql = "INSERT INTO user (username,password)
VALUES
('$_POST[username]','$_POST[password]')";
if (!mysql_query($sql,$con)) {
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?
注册一个新用户insert.php
?php
$con = mysql_connect("localhost","root","");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
mysql_query("UPDATE user SET password = '$_POST[password]' WHERE username = '$_POST[username]'");
mysql_close($con);
?
修改一个用户密码update.php
html
head
titleFORM/title
/head
body
br /
h1Insert:/h1
form action="insert.php" method="post"
username:input type="name" name="username"/
br /
password:input type="password" name="password"/
input type="submit" value="submit"/
/form
br /hr /br /
h1Delete/h1
form action="delete.php" method="post"
username:input type="name" name="username" /
br /
Are you sure?input type="submit" value="sure" /
/form
br /hr /br /
h1Update/h1
form action="update.php" method="post"
username:input type="name" name="username"/
br /
You want to change your password into:input type="password" name="password"/
input type="submit" value="submit"/
/form
br /hr /br /
/body
/html
以上三个功能的提交源Operate.html
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款