0

0

mysql C API statment and bind 执行查询

php中文网

php中文网

发布时间:2016-06-07 15:40:05

|

1386人浏览过

|

来源于php中文网

原创

#include string #include mysql/mysql.h #include default.h typedefstd::stringstring; structmysql_parm{ stringhost; stringuser; stringpassword; stringdatabase; stringunixsock; }; classDBSTMT; classDBMysql; classDBSTMT{ DBSTMT(const DBSTMT);

#include
#include
#include

typedef std::string string;

struct mysql_parm{
 string host;
 string user;
 string password;
 string database;
 string unixsock;
};
class DBSTMT;
class DBMysql;

class DBSTMT{
 DBSTMT(const DBSTMT&);
 DBSTMT& operator=(const DBSTMT&);
 MYSQL_STMT* stmt_;
public:
 DBSTMT(pcsz_t query,DBMysql& mysql);
 void execute(){
  if(mysql_stmt_execute(stmt_))
   throw mysql_stmt_error(stmt_);
 }
 
 void execute(MYSQL_BIND* bind){
  if(mysql_stmt_execute(stmt_))
   throw mysql_stmt_error(stmt_);
  if(mysql_stmt_bind_result(stmt_,bind)){
   throw mysql_stmt_error(stmt_);
  }
  if(mysql_stmt_store_result(stmt_))
   throw mysql_stmt_error(stmt_);
 }

 //void execute(){
 // if(mysql_stmt_execute(stmt_))
 //  throw mysql_stmt_error(stmt_);
 //}
 
 void bind(MYSQL_BIND* bind){
  if(mysql_stmt_bind_param(stmt_,bind) )
   throw mysql_stmt_error(stmt_);
 }
 
 int fetch(){
  return mysql_stmt_fetch(stmt_)==0;
 }
 ~DBSTMT(){
  if(stmt_){
   mysql_stmt_close(stmt_);
  }
 }
 
};


class DBMysql{
 DBMysql(const DBMysql&);
 DBMysql&operator=(const DBMysql&);
MYSQL * mysqlPtr_;

uint32_t errno_;
protected:
 friend class DBSTMT;
 MYSQL_STMT* _createSTMT(){
  MYSQL_STMT *ret=mysql_stmt_init(mysqlPtr_);
  if(ret)
   return ret;
  errno_=mysql_errno(mysqlPtr_);
  throw mysql_error(mysqlPtr_);
 }
public:
 const char* strerr(){
  return mysql_error(mysqlPtr_);
 }
 DBMysql():mysqlPtr_(NULL){
  mysqlPtr_=mysql_init(NULL);
  if(NULL== mysqlPtr_)
   throw "Mysql :outof memory";
 }
 void open(const mysql_parm& parm){
  if(!mysql_real_connect(mysqlPtr_,
   parm.host.c_str(),
   parm.user.c_str(),
   parm.password.c_str(),
   parm.database.c_str(),
   0,
   parm.unixsock.c_str(),
   0 ))
  {
   errno_=mysql_errno(mysqlPtr_);
   throw(mysql_error(mysqlPtr_));
  }
 }

 void close(){
  if(mysqlPtr_)
  {
   mysql_close(mysqlPtr_);
   mysqlPtr_=NULL;
  }
 }
  
};


DBSTMT::DBSTMT(pcsz_t query,DBMysql& mysql):stmt_(NULL){
 stmt_=mysql._createSTMT();
 if(!stmt_)
  throw mysql.strerr();
 if( mysql_stmt_prepare(stmt_,query,strlen(query)) )
 {
  //const char* err=
  
  throw mysql_stmt_error(stmt_);
 }
 
}


struct account{
 char user[36];
 byte password[16];
 uint32_t status;
 uint32_t id;
};

#define DECL_BIND(h,n)/
class bind_##h:public h{/
 typedef h parent;/
 MYSQL_BIND  _bind[n];/
 my_bool   _is_null[n];/
 unsigned long _length[n];/
public:/
 bind_##h(){/
  int i=0;/
  bzero(_bind,sizeof(_bind));

VanceAI Image Resizer
VanceAI Image Resizer

VanceAI推出的在线图片尺寸调整工具

下载


#define BIND_BIN(x,l)/
 _bind[i].buffer_type= MYSQL_TYPE_STRING;/
 _bind[i].buffer= (char *)&(parent::x);/
 _bind[i].buffer_length= l;/
 _bind[i].is_null= _is_null+i;/
 _bind[i].length= _length+i;/
 ++i;

#define BIND_INT(x)/
 _bind[i].buffer_type= MYSQL_TYPE_LONG;/
 _bind[i].buffer= (char *)&(parent::x);/
 _bind[i].buffer_length= 0;/
 _bind[i].is_null= _is_null+i;/
 _bind[i].length= _length+i;/
 ++i;

#define END_BIND(h)  }/
 operator MYSQL_BIND*(){/
 return _bind;/
 }/
};


//account acc;
//
//DECL_BIND(4)
// BIND_BIN(acc.user,32);
// BIND_BIN(acc.password,16);
// BIND_INT(acc.status);
// BIND_INT(acc.id);

// smt.executeAndStore(bind);
//END_BIND(4)

DECL_BIND(account,4)
 BIND_BIN(user,32)
 BIND_BIN(password,16)
 BIND_INT(status)
 BIND_INT(id)
END_BIND(account)

int main(){

 try{
  
  DBMysql mysql;
  mysql_parm parm;
  parm.host="localhost";
  parm.user="root";
  parm.password="mypwd";
  parm.unixsock="/var/lib/mysql/mysql.sock";
  parm.database="testdb";
  mysql.open(parm);
  
  DBSTMT smt("select user,password,status,id from account",mysql);
  DBSTMT smt1("insert into account(user,password,status) value(?,?,?)",mysql);
 //
  
  bind_account acc;
  
  smt.execute(acc);
  
  while(smt.fetch()){
   //acc.user[length[0]]=0;
   //acc.user,
   printf("%s %d %d/n",acc.user,acc.status,acc.id);
   //printf("%d %d/n",acc.status,acc.id);
   
   ;
   
  };
  smt1.bind(acc);
  smt1.execute();
  
  
  
 }catch(const char* err){
  printf("error:%s/n",err);
 }
 
 return 0;
 
}


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

31

2026.02.04

学习通网页版入口与在线学习指南 学习通官网登录与使用方法
学习通网页版入口与在线学习指南 学习通官网登录与使用方法

本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。

6

2026.02.04

Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

7

2026.02.04

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

3

2026.02.04

Golang 容器化与 Docker 实战
Golang 容器化与 Docker 实战

本专题深入讲解 Golang 应用的容器化与 Docker 部署,涵盖 Docker 基础概念、容器构建与镜像管理、Go 应用的 Dockerfile 编写、跨平台容器部署与优化、Docker Compose 和 Kubernetes 部署工具。通过实际案例,帮助学习者掌握 如何将 Golang 应用容器化并实现高效部署与管理,提升系统的可扩展性与运维效率。

3

2026.02.04

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

59

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

110

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

56

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

9

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.1万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 822人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号