m1 mac上使用c++连接mysql并取得数据(笔记及遇到的错误)

本人系统

m1 mac上使用c++连接mysql并取得数据(笔记及遇到的错误)_第1张图片

准备工作

  • 下载并安装mysql
  • 配置号c++的编译环境

测试代码

/* ************************************************************************
> File Name:     test15.cpp
> Author:        Qian JiLi
> mail:          [email protected]
> Created Time:  Wed May 17 17:20:48 2023
> Description:   mysql
 ************************************************************************/
#include "mysql.h"
#include 
using namespace std;

int main() {
  MYSQL ceshi;
  mysql_init(&test); // 初始化MYSQL变量
  MYSQL_RES *result;
  MYSQL_ROW row;
  int num; // 用来存放结果集列数
  int i;

  if (mysql_real_connect(&test, "localhost", "root", "12345", "community",
                         3306, NULL, 0)) // 连接到mysql
  {
    cout << "\n\t-----MySQL已连接----" << endl;
  }

  if (!mysql_query(
          &test,
          "SELECT * FROM user where id = 11")) // 若查询成功返回0,失败返回随机数
  {
    cout << "\n\t  ----查询成功----" << endl;
  }

  result = mysql_store_result(&test); // 将查询到的结果集储存到result中

  num = mysql_num_fields(result); // 将结果集列数存放到num中

  while ((row = mysql_fetch_row(result))) // 遇到最后一行,则中止循环
  {
    for (i = 0; i < num; i++) // 利用for循环,输出该行的每一列
    {
      if (row[i])				// 如果mysql中该列为null,此处会段错误
        cout << row[i] << "\t"; // row是MYSQL_ROW变量,可以当做数组使用,i为列数
      else
        cout << "NULL"
             << "\t";
    }
  }

  mysql_free_result(result); // 释放结果集所占用的内存
  mysql_close(&test);       // 关闭与mysql的连接
}

链接mysql所需的库

我的makefile文件:

all:test15

test15:test15.cpp
	 g++ -g -o ./bin/test15 test15.cpp -I/usr/local/mysql/include  -L/usr/local/mysql/lib  -lmysqlclient

clean:

从网上看到的brew install libmysqlclient等方法都不行,终于看到有人说在mysql安装目录下有mysql.h的头文件以及libmysqlclient的库文件。
但是,又出现了下图中的问题:
在这里插入图片描述
我们按照他的提示继续排查:

# 1
sudo cp /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/local/lib                                                                                                                                             ─╯
Password:

./bin/test15                                                                                                                                               ─╯
dyld[69318]: Library not loaded: @loader_path/../lib/libssl.1.1.dylib
  Referenced from: <BEB4594C-7EE2-3AA9-976C-919037EE4504> /usr/local/lib/libmysqlclient.21.dylib
  Reason: tried: '/usr/local/lib/../lib/libssl.1.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS@loader_path/../lib/libssl.1.1.dylib' (no such file), '/usr/local/lib/../lib/libssl.1.1.dylib' (no such file), '/usr/local/lib/libssl.1.1.dylib' (no such file), '/usr/lib/libssl.1.1.dylib' (no such file, not in dyld cache)
[1]    69318 abort      ./bin/test15

# 2
sudo cp /usr/local/mysql/lib/libssl.1.1.dylib /usr/local/lib                                                                                                                                                    ─╯

./bin/test15                                                                                                                                                                                                    ─╯
dyld[69417]: Library not loaded: @loader_path/../lib/libcrypto.1.1.dylib
  Referenced from: <BEB4594C-7EE2-3AA9-976C-919037EE4504> /usr/local/lib/libmysqlclient.21.dylib
  Reason: tried: '/usr/local/lib/../lib/libcrypto.1.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS@loader_path/../lib/libcrypto.1.1.dylib' (no such file), '/usr/local/lib/../lib/libcrypto.1.1.dylib' (no such file), '/usr/local/lib/libcrypto.1.1.dylib' (no such file), '/usr/lib/libcrypto.1.1.dylib' (no such file, not in dyld cache)
[1]    69417 abort      ./bin/test15

# 3
sudo cp /usr/local/mysql/lib/libcrypto.1.1.dylib /usr/local/lib 

中间我还遇到了要判断字段是否为NULL的错误

成功

你可能感兴趣的:(mysql,c++,macos)