เข้าถึง MySQL โดยใช้ C

ด้วยบทช่วยสอนนี้ฉันนำเสนอต่อชุมชนถึงวิธีการเข้าถึงฐานข้อมูล MySQL จากภาษาโปรแกรม C และไม่ต้องใช้การอ้างอิงมากเกินไปเพียงแค่

libmysqlclient

ฉันหวังว่าจะเป็นประโยชน์สำหรับผู้ที่ต้องการเอกสารประเภทนี้ดังนั้นจึงยังคงมีส่วนร่วมในชุมชน SL และช่วยเหลือผู้ที่ไม่มีอินเทอร์เน็ต

องค์ประกอบ

ก่อนอื่นเราต้องตรวจสอบว่าเราได้ติดตั้งไลบรารีการออกแบบไว้แล้ว *-dev เพื่อให้สามารถเข้าถึงจาก C / C ++ ไปยัง MySQL

mysql_config --libs

ควรมีลักษณะดังนี้:

-Wl, -Bsymbolic-functions –L / usr / lib / mysql -lmysqlclient rdynamic

ในกรณีที่คุณตรวจสอบว่าไม่ได้ติดตั้งไลบรารีเราจะติดตั้งด้วยคำสั่งต่อไปนี้:

sudo apt-get ติดตั้ง libmysqlclient-dev mysql_config --cflags -I / usr / include / mysql -DBIG_JOINS = 1 -fno-tight-aliasing -DUNIV_LINUX -DUNIV_LINUX

เนื่องจากเราตรวจสอบและติดตั้งสิ่งที่เราต้องการสำหรับการเชื่อมโยงระหว่าง MySQL และ C เราจึงดำเนินการสร้างฐานข้อมูล:

สร้างการทดสอบฐานข้อมูล ใช้ทดสอบ; สร้างข้อมูลตาราง (id int AUTO_INCREMENT ไม่ใช่ NULL PRIMARY KEY ชื่อ varchar (40) อายุ int); INSERT INTO data VALUES (NULL, 'Alma Hernandez', 28), (NULL, 'Jose Sanchez', 39), (NULL, 'Martin loera', 25), (NULL, 'Leonardo Cortez', 26), (NULL , 'กุสตาโวโรเมโร', 25);

การเขียนโปรแกรมและการคอมไพล์

เราสร้างรหัสต่อไป:

Query.c

/ * ไลบรารีที่จะใช้ * / #include / * ไลบรารีที่ช่วยให้เราใช้ประโยชน์จากการเชื่อมต่อและการสืบค้นกับ MySQL * / #include / * ในการใช้ printf ฯลฯ * / int หลัก () {MYSQL * conn; / * ตัวแปรการเชื่อมต่อสำหรับ MySQL * / MYSQL_RES * res; / * ตัวแปรที่จะมีผลลัพธ์ของแถวแบบสอบถาม * / MYSQL_ROW; / * ตัวแปรที่จะมีฟิลด์สำหรับแต่ละระเบียนที่ปรึกษา * / char * server = "localhost"; / * ที่อยู่เซิร์ฟเวอร์ 127.0.0.1, localhost หรือที่อยู่ IP * / char * user = "root"; / * ผู้ใช้เพื่อสอบถามฐานข้อมูล * / ถ่าน * รหัสผ่าน = "root"; / * รหัสผ่านสำหรับผู้ใช้ที่มีปัญหา * / char * database = "test"; / * ชื่อของฐานข้อมูลที่ต้องการค้นหา * / conn = mysql_init (NULL); / * initialization เป็น null การเชื่อมต่อ * / / * เชื่อมต่อกับฐานข้อมูล * / if (! mysql_real_connect (conn, server, user, password, database, 0, NULL, 0)) {/ * กำหนดพารามิเตอร์การเชื่อมต่อที่ตั้งไว้ก่อนหน้านี้ * / fprintf (stderr, "% s \ n", mysql_error (conn)); / * หากมีข้อผิดพลาดให้กำหนดว่าข้อผิดพลาดใดคือ * / exit (1); } / * ส่งการสืบค้น SQL * / if (mysql_query (conn, "select * from data")) {/ * คำจำกัดความของแบบสอบถามและที่มาของการเชื่อมต่อ * / fprintf (stderr, "% s \ n", mysql_error ( คอนน)); ทางออก (1); } res = mysql_use_result (เชื่อมต่อ);
	printf("ID \ tName \ t \ age \ n"); ในขณะที่ ((row = mysql_fetch_row (res))! = NULL) / * วนรอบตัวแปร res พร้อมบันทึกทั้งหมดที่ได้รับเพื่อใช้งาน * /
		printf("% s \ t% s \ t% s \ n", แถว [0], แถว [1], แถว [2]); / * ตัวแปร row จะกลายเป็นอาร์เรย์สำหรับจำนวนฟิลด์ในตาราง * / / * ตัวแปร res ถูกปล่อยและปิดการเชื่อมต่อ * / mysql_free_result (res) mysql_close (เชื่อมต่อ); }

เรารวบรวมด้วย:

gcc -o แบบสอบถาม $ (mysql_config --cflags) Query.c $ (mysql_config -–libs)

การยืนยัน

เราดำเนินการ:

./Query

Fuente: บล็อกของ Hugo4295


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   โครตสึกิ dijo

    ดีที่บันทึกไว้ในคลังแสงสคริปต์และบทช่วยสอนบนคอนโซล! +1 สำหรับคุณพันธมิตร ...

  2.   โรดริโก dijo

    สวัสดีขอแสดงความยินดีกับทุกสิ่งที่อยู่บนเว็บเกี่ยวกับปัญหานี้ขอแสดงความยินดีกับคุณที่สุด สงสัยนิดหน่อยทำไมถึงไม่ได้ไฟล์ปฏิบัติการ ??

    ในช่วงเวลาของcomílarจะไม่ทำเครื่องหมายข้อผิดพลาดใด ๆ แต่จะไม่สร้าง. /ser4

  3.   อันเดรโล dijo

    มีความคิดอย่างไรใน Fedora?

  4.   วิคเตอร์เดอลาโอ dijo

    ฉันไม่เห็นด้วยกับการแบ่งปันข้อมูล แต่หากไม่ได้วางลิขสิทธิ์เนื่องจากตัวอย่างนี้จัดทำโดยฉันตั้งแต่ปี 2011 และนี่คือที่อยู่ของแหล่งที่มาดั้งเดิม

    http://hugo4295.blogspot.mx/search?q=MYSQL

    1.    Elav dijo

      ไม่มีปัญหา Victor แต่ถ้าคุณสังเกตเห็นว่าฉันไม่ได้นำบทความจากไซต์ของคุณ แต่มาจากที่อื่นที่พวกเขาไม่ได้ใส่แหล่งที่มา อย่างไรก็ตามตอนนี้ฉันแก้ไขบทความ .. 😉

  5.   Alfonso Ovidio López Morales dijo

    การแบ่งปันความรู้ที่ยอดเยี่ยมเสรีภาพที่ดี

  6.   แดเนียล เฟอร์นันเดซ dijo

    แล้วแทรกได้ยังไง ???