php中 mysqli, pdo 可以用 mysqlndlibmysqlclient 实现

前者 从 php 5.3.0起已内置到php中, 并且支持更多的特性,推荐用 mysqlnd

mysqlnd , libmysqlclient 对比:
http://php.net/manual/en/mysqlinfo.library.choosing.php

mysqlnd 目前是php源码的一部分

http://php.net/manual/en/intro.mysqlnd.php

php编译参数:

// Recommended, compiles with mysqlnd
$ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd// Alternatively recommended, compiles with mysqlnd as of PHP 5.4
$ ./configure --with-mysqli --with-pdo-mysql --with-mysql// Not recommended, compiles with libmysqlclient
$ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config --with-mysql=/path/to/mysql_config

环境准备:

1、安装 libmysqlclient

http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-6.0.2.tar.gz

  1. Change location to the top-level directory of the source distribution.

  2. Generate the Makefile:

    shell> cmake -G "Unix Makefiles"
    

    Or, for a Debug build:

    shell> cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug
    

    By default, the installation location for Connector/C is /usr/local/mysql. To change this location, use theCMAKE_INSTALL_PREFIX option to specify a different directory when generating the Makefile. For example:

    shell> cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/opt/local/mysql
    

    For other CMake options that you might find useful, see Other Connector/C Build Options.

  3. Build the project:

    shell> make
    
  4. As root, install the Connector/C headers, libraries, and utilities:

    root-shell> make install

 示例代码:

//main.c
//gcc main.c -o test -lmysqlclient// @link http://dev.mysql.com/doc/refman/5.6/en/c-api-function-overview.htm// libmysqlclient library

#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>MYSQL *get_conn()
{//连接配置char *host = "127.0.0.1";char *user = "root";char *passwd = "";char *db = "test";int  port = 3306;my_bool reconnect = 1;MYSQL *my_con = (MYSQL *)malloc( sizeof(MYSQL) ); //数据库连接句柄//连接数据库
    mysql_init(my_con); mysql_options(my_con, MYSQL_OPT_RECONNECT, &reconnect);mysql_real_connect(my_con, host, user, passwd, db, port, NULL, CLIENT_FOUND_ROWS);mysql_query(my_con, "set names utf8");return my_con;
}/*** 释放空间,关闭连接* * @param mysql* @return */
void free_conn(MYSQL *mysql)
{mysql_close(mysql);free(mysql);
}//发生错误时,输出错误信息,关闭连接,退出程序
void error_quit(const char *str, MYSQL *connection)
{fprintf(stderr, "%s\n errno: %d\n error:%s\n sqlstat:%s\n",str, mysql_errno(connection),mysql_error(connection),mysql_sqlstate(connection));if( connection != NULL ){mysql_close(connection);}free(connection);exit(EXIT_FAILURE);
}void insert(MYSQL *my_con)
{int res;res = mysql_query(my_con, "INSERT INTO test(fid) VALUES(null)");if( res != 0 ){error_quit("Select fail", my_con);}printf("affected rows:%d \n", mysql_affected_rows(my_con));printf("last insertId :%d \n", mysql_insert_id(my_con));}void update(MYSQL *my_con)
{int res;res = mysql_query(my_con, "UPDATE test SET FScore=119.10");if( res != 0 ){error_quit("Select fail", my_con);}printf("affected rows:%d \n", mysql_affected_rows(my_con));}void delete(MYSQL *my_con)
{int res;res = mysql_query(my_con, "DELETE FROM test WHERE FID=31");if( res != 0 ){error_quit("Select fail", my_con);}printf("affected rows:%d \n", mysql_affected_rows(my_con));}void query(MYSQL *my_con)
{MYSQL_RES   *my_res;    //查询结果MYSQL_FIELD *my_field;  //结果中字段信息MYSQL_ROW    my_row;    //结果中数据信息
    unsigned long *lengths;int cols, res, i;//获取整个表的内容
    res = mysql_query(my_con, "SELECT * FROM test LIMIT 5");if( res != 0 ){error_quit("Select fail", my_con);}        /*mysql_query , mysql_real_query 区别While a connection is active, the client may send SQL statements to the server using mysql_query() or mysql_real_query(). The difference between the two is that mysql_query() expects the query to be specified as a null-terminated string whereas mysql_real_query() expects a counted string. If the string contains binary data (which may include null bytes), you must use mysql_real_query().     *///从服务端取回结果 mysql_store_result 会把数据全部拉取到客户端, mysql_use_result() 则不会my_res = mysql_store_result(my_con); // A MYSQL_RES result structure with the results. NULL (0) if an error occurred or has not result like deleteif( NULL == my_res ) //可以通过返回值来判断是否是 select
    {error_quit("Get result fail", my_con);}// mysql_row_seek(), mysql_data_seek() , mysql_num_rows 只有在用mysql_store_result 才可以使用printf("num rows:%d \n", mysql_num_rows(my_res));//获取表的列数cols = mysql_num_fields(my_res);printf("num cols:%d \n", cols);//获取字段信息my_field = mysql_fetch_fields(my_res);for(i=0; i<cols; i++){printf("%s\t", my_field[i].name);}printf("\n");for(i=0; i<cols; i++){//字段类型printf("%d\t", my_field[i].type);}printf("\n");//输出执行结果while( my_row = mysql_fetch_row(my_res) ){for(i=0; i<cols; i++){//数据长度lengths = mysql_fetch_lengths(my_res);printf("%s(%lu)\t", my_row[i], lengths[i]);}printf("\n");}mysql_free_result(my_res);}void status(MYSQL *my_con)
{printf("mysql_get_server_info: %s \n", mysql_get_server_info(my_con));printf("mysql_stat: %s \n", mysql_stat(my_con));printf("mysql_get_proto_info: %u \n", mysql_get_proto_info(my_con));}int main(int argc, char *argv[])
{//连接数据库MYSQL *my_con = get_conn();if( NULL == my_con ) {error_quit("Connection fail", my_con);}printf("Connection success \n");status(my_con);insert(my_con);delete(my_con);update(my_con);//select
    query(my_con);// free the memory
    free_conn(my_con);return EXIT_SUCCESS;
}

test.sql

/*
Navicat MySQL Data TransferSource Server         : localhost
Source Server Version : 50524
Source Host           : 127.0.0.1:3306
Source Database       : testTarget Server Type    : MYSQL
Target Server Version : 50524
File Encoding         : 936Date: 2015-09-16 15:02:57
*/create DATABASE test;SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (`FID` int(11) NOT NULL AUTO_INCREMENT,`FTableName` char(60) NOT NULL DEFAULT '',`FFieldName` char(30) NOT NULL DEFAULT '',`FTemplate` char(30) NOT NULL DEFAULT '',`FScore` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT 'ио╩§',PRIMARY KEY (`FID`)
) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=latin1;-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO test VALUES ('1', 'A', 'xx', 'TEMPALTE 1', '119.10');
INSERT INTO test VALUES ('2', 'B', 'jj', 'TEMPALTE 1', '119.10');
INSERT INTO test VALUES ('3', 'D', 'k', 'TEMPALTE 1', '119.10');
INSERT INTO test VALUES ('4', 'C', 'm', 'TEMPALTE 1', '119.10');
INSERT INTO test VALUES ('5', 'B', 'y', 'TEMPALTE 2', '119.10');
INSERT INTO test VALUES ('6', 'D', 'k', 'TEMPALTE 2', '119.10');
INSERT INTO test VALUES ('7', 'C', 'm', 'TEMPALTE 2', '119.10');
INSERT INTO test VALUES ('8', 'E', 'n', 'TEMPALTE 2', '119.10');
INSERT INTO test VALUES ('9', 'D', 'z', 'TEMPALTE 3', '119.10');
INSERT INTO test VALUES ('10', 'E', 'n', 'TEMPALTE 3', '119.10');
INSERT INTO test VALUES ('11', 'A', 'x', 'TEMPALTE 2', '119.10');
INSERT INTO test VALUES ('12', 'A', 'x', 'TEMPALTE 3', '119.10');
INSERT INTO test VALUES ('13', 'A', 'x', 'TEMPALTE 4', '119.10');
INSERT INTO test VALUES ('14', 'E', 'p', 'TEMPALTE 4', '119.10');
INSERT INTO test VALUES ('15', 'A', 'x', 'TEMPALTE 5', '119.10');
INSERT INTO test VALUES ('16', 'C', 'q', 'TEMPALTE 5', '119.10');
INSERT INTO test VALUES ('17', '', '', '', '119.10');

参考文档:http://dev.mysql.com/doc/refman/5.6/en/c-api-function-overview.html

http://www.linuxfocus.org/ChineseGB/September2003/article304.shtml#304lfindex3

转载于:https://www.cnblogs.com/siqi/p/4810369.html

C语言操作mysql相关推荐

  1. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  2. c语言连接mysql(入门)_MySQL入门之C语言操作MySQL

    基本概念 C APIs包含在mysqlclient库文件当中,与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询.#include #include #include #include # ...

  3. go语言mysql操作_使用Go语言操作MySQL数据库的思路与步骤

    最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...

  4. golang mysql curd_Go 语言操作 MySQL 之 CURD 操作

    本文转载于SegmentFault社区 作者:Meng小羽 MySQL 是目前开发中最常见的关系型数据库,使用 Go 语言进行操控数据库需要使用 Go 自带database/sql和驱动go-sql- ...

  5. C语言操作MYSQL小例子

    http://blog.csdn.net/small_qch/article/details/8180678 初学使用用C语言操作MYSQL,写了个小例子,帖上来献丢人一下,呵呵. 程序很简单,先连接 ...

  6. Linux C语言操作MySQL

    1.MySQL数据库简介 MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源.MySQL有以下特性: (1) 使用C和C++编写,并使用了多种编译器进行测试,保证源码的可 ...

  7. c web mysql数据库_C语言操作MySQL数据库

    原作者博客http://www.cnblogs.com/nliao/archive/2010/09/09/1822660.html 先看结构体 ---------------------------- ...

  8. linux下c语言调用mysql,Linux下C语言操作MYSQL总结

    Linux下C语言操作MYSQL总结 发布时间:2006-12-17 00:40:00来源:红联作者:anciens 下文的用到的数据库表: 数据库中存在表table, 有name(varchar类型 ...

  9. 用C语言操作MySQL数据库-通用版

    用C语言操作MySQL数据库 先看结构体: 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接. typedef struc ...

  10. c语言将数据写入mysql中_用C语言操作MySQL数据库

    先看结构体 ---------------------------------------------- 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql ...

最新文章

  1. 提升网站优化排名的前提是什么?
  2. Jetty实战之 嵌入式Jetty运行web app
  3. 数据结构与算法--数字在排序数组中出现次数
  4. java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...
  5. vue-cli history 本地开发刷新页面丢失_react 开发入门
  6. 8b 10b c语言编码,2012年计算机等级二级C语言章节习题及答案(10)
  7. C#设计模式--设配器模式
  8. FRR BGP代码分析20 -- 6PE\6VPE
  9. 互联网协议第四版ipv4
  10. Java编程ture找不到符号,[未解决]Bugly中上传符号表dSYM文件
  11. 基于Echarts实现可视化数据大屏服务大数据可视化监管平台
  12. android 脚本发短信,Android使用Intent发送短信的实现方法
  13. PE系统与U盘启动工具的推荐
  14. Mongodb副本集部署(Centos7)
  15. linux parted 方式挂盘,支持大于4T盘扩容
  16. 用样本推断整体,中心极限定理及其一些前提条件
  17. [论文写作笔记] C4以小窥大的摘要 C5 讲故事一样的引言
  18. zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH
  19. 计算机网络技术高职单招题库上机,全国高职单招计算机类模拟试卷及答案-20210522020322.docx-原创力文档...
  20. appium自动化实例

热门文章

  1. 计算机网络ipv4到ipv6怎么实现,论计算机网络协议IPV4到IPV6的过渡策略|房屋搬迁过渡协议...
  2. tp5类的属性不存在_thinkPHP5.1框架中Request类四种调用方式示例
  3. 接口返回的类型是html页面_1.10 PhalApi 2.x 接口文档
  4. java chsftp.get 追加_Java SFTP上传使用JSch,但如何覆盖当前文件?
  5. mssql 远程无法连接mysql_在本地 怎么远程连接MSSQL数据库
  6. Java注释 link_Java 文档注释
  7. 交通大数据应用细分_盈海科技 | 交通大数据可视化“掘金”数据价值
  8. 搬家后第一次缴电费,查询客户编号的解决办法
  9. msf各种弱口令爆破
  10. oracle修改某表中的顺序,oracle 数据库 , 表中字段顺序修改