Hướng dẫn mysql c api example - ví dụ mysql c api

Sửa đổi lần cuối ngày 23 tháng 9 năm 2020

Đây là hướng dẫn lập trình C cho cơ sở dữ liệu MySQL. Nó bao gồm những điều cơ bản của lập trình MySQL với API C. Bạn cũng có thể xem xét để xem xét hướng dẫn MySQL trên ZetCode.

Về cơ sở dữ liệu MySQL

MySQL là một hệ thống quản lý cơ sở dữ liệu nguồn mở hàng đầu. Nó là một người dùng nhiều người dùng, hệ thống quản lý cơ sở dữ liệu đa luồng. MySQL đặc biệt phổ biến trên web. MySQL hiện đang thuộc sở hữu của Oracle. Cơ sở dữ liệu MySQL có sẵn trên hầu hết các nền tảng HĐH quan trọng. Nó chạy trên BSD Unix, Linux, Windows hoặc Mac OS.

Mariadb là một ngã ba được phát triển cộng đồng, được hỗ trợ thương mại của hệ thống quản lý cơ sở dữ liệu quan hệ MySQL

$ sudo apt install default-libmysqlclient-dev

Để có thể biên dịch các ví dụ C, chúng tôi cần cài đặt các thư viện phát triển MySQL C. Dòng trên cho thấy cách chúng ta có thể làm điều đó trên Linux dựa trên Debian.

C99

Hướng dẫn này sử dụng C99. Đối với trình biên dịch GNU C, chúng ta cần thêm tùy chọn -STD = C99. Đối với người dùng Windows, Pelles C IDE rất được khuyến khích. [MSVC không hỗ trợ C99.]

MYSQL *con = mysql_init[NULL];

Trong C99, chúng ta có thể trộn các khai báo với mã. Trong các chương trình C cũ hơn, chúng ta sẽ cần tách dòng này thành hai dòng.

Mysql c ví dụ đầu tiên

Trong ví dụ đầu tiên, chúng tôi kiểm tra một cuộc gọi hàm MySQL.

version.c

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}

$ c99 version.c -o version  `mysql_config --cflags --libs`
6 hiển thị phiên bản máy khách MySQL.

#include 
#include 
#include 

Chúng tôi bao gồm các tập tin tiêu đề cần thiết.

printf["MySQL client version: %s\n", mysql_get_client_info[]];

Dòng mã này xuất ra phiên bản của máy khách MySQL. Đối với điều này, chúng tôi sử dụng cuộc gọi chức năng

$ c99 version.c -o version  `mysql_config --cflags --libs`
6.

exit[0];

Chúng tôi thoát khỏi kịch bản.

$ c99 version.c -o version  `mysql_config --cflags --libs`

Đây là cách chúng tôi biên dịch ví dụ mã.

$ ./version
MySQL client version: 10.3.24

Đây là đầu ra.

Mysql c tạo cơ sở dữ liệu

Ví dụ mã tiếp theo sẽ tạo cơ sở dữ liệu. Ví dụ mã có thể được chia thành các phần sau:

  • Bắt đầu cấu trúc xử lý kết nối
  • Tạo ra một kết nối
  • Thực hiện một truy vấn
  • Đóng kết nối

createdb.c

#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}

Ví dụ mã kết nối với hệ thống cơ sở dữ liệu MySQL và tạo cơ sở dữ liệu mới gọi là

$ c99 version.c -o version  `mysql_config --cflags --libs`
8.

MYSQL *con = mysql_init[NULL];

Hàm

$ c99 version.c -o version  `mysql_config --cflags --libs`
9 phân bổ hoặc khởi tạo đối tượng MySQL phù hợp cho hàm
$ ./version
MySQL client version: 10.3.24
0. Hãy nhớ rằng đây là C99.

MYSQL *con = mysql_init[NULL];
0

Chúng tôi kiểm tra giá trị trả về. Nếu hàm

$ c99 version.c -o version  `mysql_config --cflags --libs`
9 không thành công, chúng tôi in thông báo lỗi và chấm dứt ứng dụng.

MYSQL *con = mysql_init[NULL];
1

Hàm

$ ./version
MySQL client version: 10.3.24
0 thiết lập kết nối với cơ sở dữ liệu. Chúng tôi cung cấp trình xử lý kết nối, tên máy chủ, tên người dùng và thông số mật khẩu cho hàm. Bốn tham số khác là tên cơ sở dữ liệu, số cổng, ổ cắm UNIX và cuối cùng là cờ máy khách. Chúng tôi cần SuperUser Pribiliges để tạo một cơ sở dữ liệu mới.

MYSQL *con = mysql_init[NULL];
2

$ ./version
MySQL client version: 10.3.24
3 thực thi câu lệnh SQL. Trong trường hợp của chúng tôi, câu lệnh tạo ra một cơ sở dữ liệu mới.

MYSQL *con = mysql_init[NULL];
3

Cuối cùng, chúng tôi đóng kết nối cơ sở dữ liệu.

MYSQL *con = mysql_init[NULL];
4

Đây là bằng chứng cho thấy cơ sở dữ liệu đã được tạo ra.

Mysql c tạo và điền bảng

Trước khi chúng tôi tạo một bảng mới, chúng tôi tạo một người dùng mà chúng tôi sẽ sử dụng trong phần còn lại của hướng dẫn.

MYSQL *con = mysql_init[NULL];
5

Chúng tôi đã tạo một người dùng mới

$ ./version
MySQL client version: 10.3.24
4.

MYSQL *con = mysql_init[NULL];
6

Ở đây chúng tôi cấp tất cả các đặc quyền cho

$ ./version
MySQL client version: 10.3.24
4 trên cơ sở dữ liệu
$ c99 version.c -o version  `mysql_config --cflags --libs`
8.

Ví dụ mã tiếp theo tạo một bảng và chèn một số dữ liệu vào đó.

create_populate.c

MYSQL *con = mysql_init[NULL];
7

Chúng tôi không sử dụng bất kỳ cuộc gọi hàm MySQL mới nào ở đây. Chúng tôi sử dụng cuộc gọi chức năng

$ ./version
MySQL client version: 10.3.24
3 để cả tạo bảng và chèn dữ liệu vào đó.

MYSQL *con = mysql_init[NULL];
8

Để tránh sự lặp lại không cần thiết, chúng tôi tạo chức năng tùy chỉnh.

MYSQL *con = mysql_init[NULL];
9

Chúng tôi kết nối với cơ sở dữ liệu

$ c99 version.c -o version  `mysql_config --cflags --libs`
8. Tên người dùng là
$ ./version
MySQL client version: 10.3.24
4 và mật khẩu là
#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
1. Tham số thứ năm là tên cơ sở dữ liệu.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
0

Ở đây chúng tôi tạo một bảng có tên

#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
2. Nó có ba cột.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
1

Chúng tôi chèn một hàng vào bảng

#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
2.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
2

Chúng tôi hiển thị các bảng trong cơ sở dữ liệu.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
3

Chúng tôi chọn tất cả dữ liệu từ bảng.

Mysql c lấy dữ liệu

Trong ví dụ tiếp theo, chúng tôi lấy dữ liệu từ một bảng.

Chúng ta cần thực hiện các bước sau:

  • Tạo một kết nối
  • Thực hiện kiểm tra
  • Nhận kết quả đặt
  • Tìm nạp tất cả các hàng có sẵn
  • Miễn phí bộ kết quả

retrieva_data.c

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
4

Ví dụ cho thấy tất cả các hàng từ bảng xe.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
5

Chúng tôi thực hiện truy vấn lấy tất cả dữ liệu từ bảng xe.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
6

Chúng tôi nhận được tập kết quả bằng cách sử dụng hàm

#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
4.
#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
5 là một cấu trúc để giữ một bộ kết quả.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
7

Chúng tôi nhận được số trường [cột] trong bảng.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
8

Chúng tôi tìm nạp các hàng và in chúng lên màn hình.

#include 
#include 
#include 

int main[int argc, char **argv]
{
  printf["MySQL client version: %s\n", mysql_get_client_info[]];

  exit[0];
}
9

Chúng tôi giải phóng các tài nguyên.

#include 
#include 
#include 
0

Đây là đầu ra.

Mysql c tạo cơ sở dữ liệu

Ví dụ mã tiếp theo sẽ tạo cơ sở dữ liệu. Ví dụ mã có thể được chia thành các phần sau:

last_row_id.c

#include 
#include 
#include 
1

Một bảng mới được tạo ra. Ba hàng được chèn vào bàn. Chúng tôi xác định ID hàng chèn cuối cùng.

#include 
#include 
#include 
2

Cột

#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
8 có loại
#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
7.

#include 
#include 
#include 
3

Hàm

#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
6 trả về giá trị được tạo cho cột
#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
7 bằng câu lệnh
MYSQL *con = mysql_init[NULL];
2 hoặc
MYSQL *con = mysql_init[NULL];
3 trước đó.

#include 
#include 
#include 
4

Đây là đầu ra.

Tiêu đề cột MySQL C

Trong ví dụ tiếp theo, chúng tôi lấy dữ liệu từ bảng và tên cột của nó.

headers.c

#include 
#include 
#include 
5

Chúng tôi in ba hàng đầu tiên từ bảng

#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
2. Chúng tôi cũng bao gồm các tiêu đề cột.

#include 
#include 
#include 
6

Cấu trúc

MYSQL *con = mysql_init[NULL];
5 chứa thông tin về một trường, chẳng hạn như tên, loại và kích thước của trường. Giá trị trường không phải là một phần của cấu trúc này; Chúng được chứa trong cấu trúc
MYSQL *con = mysql_init[NULL];
6.

#include 
#include 
#include 
7

Hàng đầu tiên chứa các tiêu đề cột. Cuộc gọi

MYSQL *con = mysql_init[NULL];
7 trả về cấu trúc
MYSQL *con = mysql_init[NULL];
5. Chúng tôi nhận được tên tiêu đề cột từ cấu trúc này.

#include 
#include 
#include 
8

Đây là đầu ra của chương trình của chúng tôi.

Mysql c nhiều câu lệnh

Có thể thực thi nhiều câu lệnh SQL trong một truy vấn. Chúng ta phải đặt cờ

MYSQL *con = mysql_init[NULL];
9 trong phương thức kết nối.

multiple_statements.c

#include 
#include 
#include 
9

Trong ví dụ, chúng tôi thực thi ba câu lệnh

MYSQL *con = mysql_init[NULL];
00 trong một truy vấn.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
0

Tùy chọn cuối cùng của phương thức

$ ./version
MySQL client version: 10.3.24
0 là cờ máy khách. Nó được sử dụng để kích hoạt một số tính năng nhất định.
MYSQL *con = mysql_init[NULL];
9 cho phép thực hiện nhiều câu lệnh. Điều này bị vô hiệu hóa theo mặc định.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
1

Truy vấn bao gồm ba câu

MYSQL *con = mysql_init[NULL];
00. Chúng được phân tách bằng ký tự dấu chấm phẩy
MYSQL *con = mysql_init[NULL];
04. Ký tự dấu gạch chéo ngược
MYSQL *con = mysql_init[NULL];
05 được sử dụng để tách chuỗi thành hai dòng. Nó không liên quan gì đến nhiều tuyên bố.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
2

Mã được đặt giữa các câu lệnh DO/trong khi. Việc truy xuất dữ liệu sẽ được thực hiện trong nhiều chu kỳ. Chúng tôi lấy dữ liệu cho mỗi câu lệnh

MYSQL *con = mysql_init[NULL];
00 riêng biệt.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
3

Chúng tôi mong đợi nhiều bộ kết quả. Do đó, chúng tôi gọi hàm

MYSQL *con = mysql_init[NULL];
07. Nó đọc kết quả câu lệnh tiếp theo và trả về một trạng thái để cho biết liệu có nhiều kết quả tồn tại hơn hay không. Hàm trả về 0 nếu việc thực hiện ổn và có nhiều kết quả hơn. Nó trả về -1, khi nó được thực thi OK và không còn kết quả nữa. Cuối cùng, nó trả về giá trị lớn hơn 0 nếu xảy ra lỗi.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
4

Chúng tôi kiểm tra lỗi.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
5

Ví dụ đầu ra.

Mysql c chèn hình ảnh

Một số người thích đưa hình ảnh của họ vào cơ sở dữ liệu, một số người thích giữ chúng trên hệ thống tệp cho các ứng dụng của họ. Khó khăn về kỹ thuật phát sinh khi chúng ta làm việc với nhiều hình ảnh. Hình ảnh là dữ liệu nhị phân. Cơ sở dữ liệu MySQL có một loại dữ liệu đặc biệt để lưu trữ dữ liệu nhị phân được gọi là

MYSQL *con = mysql_init[NULL];
08 [đối tượng lớn nhị phân].

printf["MySQL client version: %s\n", mysql_get_client_info[]];
6

Đối với các ví dụ của chúng tôi, chúng tôi tạo một bảng

MYSQL *con = mysql_init[NULL];
09 mới. Kích thước hình ảnh có thể lên đến 16 MB. Nó được xác định bởi kiểu dữ liệu
MYSQL *con = mysql_init[NULL];
10.

insert_image.c

printf["MySQL client version: %s\n", mysql_get_client_info[]];
7

Trong ví dụ này, chúng tôi chèn một hình ảnh vào bảng

MYSQL *con = mysql_init[NULL];
11.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
8

Điều này bao gồm là cho chức năng

MYSQL *con = mysql_init[NULL];
12.

printf["MySQL client version: %s\n", mysql_get_client_info[]];
9

Ở đây chúng tôi mở tệp hình ảnh. Trong thư mục làm việc hiện tại, chúng ta nên có tệp

MYSQL *con = mysql_init[NULL];
13.

exit[0];
0

Chúng tôi di chuyển con trỏ tệp đến cuối tệp bằng hàm

MYSQL *con = mysql_init[NULL];
14. Chúng tôi sẽ xác định kích thước của hình ảnh. Nếu xảy ra lỗi, chỉ báo lỗi được đặt. Chúng tôi kiểm tra chỉ báo bằng hàm
MYSQL *con = mysql_init[NULL];
14. Trong trường hợp lỗi, chúng tôi cũng đóng trình xử lý tệp đã mở.

exit[0];
1

Đối với các luồng nhị phân, hàm

MYSQL *con = mysql_init[NULL];
16 trả về số byte từ đầu tệp, ví dụ: Kích thước của tệp hình ảnh. Trong trường hợp lỗi, hàm trả về -1 và errno được đặt. Hàm
MYSQL *con = mysql_init[NULL];
17 diễn giải giá trị của errno dưới dạng thông báo lỗi và in nó vào luồng đầu ra lỗi tiêu chuẩn.

exit[0];
2

Trong mảng này, chúng tôi sẽ lưu trữ dữ liệu hình ảnh.

exit[0];
3

Chúng tôi đọc dữ liệu từ con trỏ tệp và lưu trữ nó trong mảng dữ liệu. Tổng số yếu tố đọc thành công được trả về.

exit[0];
4

Sau khi dữ liệu được đọc, chúng tôi có thể đóng trình xử lý tệp.

exit[0];
5

Hàm

MYSQL *con = mysql_init[NULL];
18 thêm một ký tự thoát, dấu gạch chéo ngược,
MYSQL *con = mysql_init[NULL];
05, trước khi một số ký tự có khả năng nguy hiểm nhất định trong một chuỗi được truyền vào hàm. Điều này có thể giúp ngăn ngừa các cuộc tấn công tiêm SQL. Bộ đệm mới phải dài nhất
MYSQL *con = mysql_init[NULL];
20.

exit[0];
6

Ở đây chúng tôi bắt đầu xây dựng tuyên bố SQL. Chúng tôi xác định kích thước của chuỗi SQL bằng hàm

MYSQL *con = mysql_init[NULL];
12.

exit[0];
7

Truy vấn phải mất đủ dài để chứa kích thước của câu lệnh chuỗi SQL và kích thước của tệp hình ảnh. Sử dụng hàm

MYSQL *con = mysql_init[NULL];
22, chúng tôi viết đầu ra được định dạng vào bộ đệm truy vấn.

exit[0];
8

Chúng tôi thực thi truy vấn bằng hàm

MYSQL *con = mysql_init[NULL];
23.
$ ./version
MySQL client version: 10.3.24
3 không thể được sử dụng cho các câu lệnh có chứa dữ liệu nhị phân; Chúng ta phải sử dụng
MYSQL *con = mysql_init[NULL];
23 thay thế.

Mysql c chọn hình ảnh

Trong ví dụ trước, chúng tôi đã chèn một hình ảnh vào cơ sở dữ liệu. Trong ví dụ sau, chúng tôi chọn hình ảnh được chèn từ cơ sở dữ liệu.

select_image.c

exit[0];
9

Trong ví dụ này, chúng tôi tạo một tệp hình ảnh từ cơ sở dữ liệu.

$ c99 version.c -o version  `mysql_config --cflags --libs`
0

Chúng tôi mở một trình xử lý tập tin mới để viết.

$ c99 version.c -o version  `mysql_config --cflags --libs`
1

Chúng tôi chọn cột

MYSQL *con = mysql_init[NULL];
26 từ bảng
MYSQL *con = mysql_init[NULL];
11 với
#include 
#include 
#include 

int main[int argc, char **argv]
{
  MYSQL *con = mysql_init[NULL];

  if [con == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      exit[1];
  }

  if [mysql_real_connect[con, "localhost", "root", "root_passwd",
          NULL, 0, NULL, 0] == NULL]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  if [mysql_query[con, "CREATE DATABASE testdb"]]
  {
      fprintf[stderr, "%s\n", mysql_error[con]];
      mysql_close[con];
      exit[1];
  }

  mysql_close[con];
  exit[0];
}
8 1.

$ c99 version.c -o version  `mysql_config --cflags --libs`
2

Hàng chứa dữ liệu thô.

$ c99 version.c -o version  `mysql_config --cflags --libs`
3

Chúng tôi có được chiều dài của hình ảnh.

$ c99 version.c -o version  `mysql_config --cflags --libs`
4

Chúng tôi viết dữ liệu được truy xuất vào đĩa bằng lệnh gọi hàm

MYSQL *con = mysql_init[NULL];
29. Chúng tôi kiểm tra chỉ báo lỗi với hàm
MYSQL *con = mysql_init[NULL];
30.

exit[0];
4

Sau khi chúng tôi đã viết dữ liệu hình ảnh, chúng tôi đóng trình xử lý tệp bằng hàm

MYSQL *con = mysql_init[NULL];
31.

Đây là hướng dẫn API MySQL C. Bạn cũng có thể quan tâm đến hướng dẫn PYMYSQL, hướng dẫn cơ bản trực quan của MySQL hoặc hướng dẫn PHP MySQLI, hướng dẫn PostgreSQL C hoặc hướng dẫn SQLite C trên ZetCode.

Bài Viết Liên Quan

Chủ Đề