


Detaillierte Einführung in die Implementierung des C++-Betriebs einer MySQL-Datenbank unter Linux
Aufgrund der Arbeit muss ich mir eine Woche Zeit nehmen, um C/C++-Methoden für den Zugriff auf verschiedene Datenbanken zu studieren und zu planen, eine Reihe von Datenbankoperationen zu kapseln. Jetzt präsentiere ich Der einfachste Teil: Zugriff auf die MySQL-Datenbank unter Linux.
Wenn Sie ein Projekt in C++ schreiben möchten, ist eine Datenbank ein Muss. Deshalb habe ich in den letzten zwei Tagen gelernt, wie man die MySQL-Datenbank in C++ bedient. Es gibt keine Tutorials, nur das Wissen, das ich online gesucht habe. Hier ist eine Zusammenfassung.
Es gibt zwei Möglichkeiten, eine Verbindung zur MySQL-Datenbank herzustellen: Die erste besteht darin, eine ADO-Verbindung zu verwenden, diese ist jedoch nur für Windows-Plattformen geeignet. Die zweite Möglichkeit besteht darin, MySQL zu verwenden eigene C APIFunktionMit Datenbank verbinden. Ich entwickle unter der Linux-Plattform und verwende daher die zweite Methode. Es gibt viele API-Funktionen, aber nur wenige werden häufig verwendet, und ich verwende nur einige davon.
API-Funktion
1.mysql_real_connect()
Verbinden Sie einen MySQL-Server
MYSQL *mysql_real_connect (MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
Wenn die Verbindung erfolgreich ist, geben Sie das MYSQL*-Verbindungshandle zurück . Wenn die Verbindung fehlschlägt, wird NULL zurückgegeben. Für eine erfolgreiche Verbindung ist der Rückgabewert derselbe wie der Wert des ersten Parameters
2.mysql_query()
Führen Sie das angegebene „NULL-terminiert“ aus string " SQL-Abfrage
gibt eine Ergebnistabelle zurück. Vorausgesetzt, die Abfrage ist erfolgreich, können Sie mysql_num_rows() aufrufen, um zu sehen, wie viele Zeilen zurückgegeben werden entsprechend der SELECT-Anweisung. Oder rufen Sie mysql_affected_rows() auf, um zu sehen, wie viele Zeilen von der Anweisung betroffen sind, die DELETE, INSERT, REPLACE oder UPDATE entspricht.
3.mysql_store_result()
MYSQL_RES *mysql_store_result(MYSQL *mysql)
Rufen Sie den vollständigen Ergebnissatz an den Client ab. Die häufigste Methode für Clients zur Verarbeitung von Ergebnismengen ist der Aufruf von mysql_store_result(), wodurch die gesamte Ergebnismenge auf einmal abgerufen wird. Diese Funktion ruft alle von der Abfrage zurückgegebenen Zeilen vom Server ab und speichert sie auf dem Client. Für jede Abfrage (SELECT, SHOW, DESCRIBE, EXPLAIN, CHECK TABLE usw.), die erfolgreich Daten abruft, muss mysql_store_result() oder mysql_use_result() aufgerufen werden. Für andere Abfragen besteht keine Notwendigkeit, mysql_store_result() oder mysql_use_result() aufzurufen. Wenn jedoch mysql_store_result() in jedem Fall aufgerufen wird, verursacht dies keinen Schaden oder Leistungseinbußen.
4.mysql_num_rows()
Gibt die Anzahl der Zeilen im Ergebnissatz zurück.
5.mysql_num_fields()
Gibt die Anzahl der Felder im Ergebnissatz zurück oder false, wenn ein Fehler auftritt.
MYSQL_FIELD* mysql_fetch_field(MYSQL_RES *result);
Erhalten Sie den Typ des nächsten Tabellenfelds und geben Sie am Ende NULL zurück.
7.mysql_fetch_row()
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
Holen Sie sich die nächste Zeile aus der Ergebnismenge und geben Sie erfolgreich ein Array mit einem Wert größer als zurück 0.
8.mysql_fetch_field_direct()
MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES *result, int i);
Geben Sie bei gegebener Feldnummer den Typ des Tabellenfelds zurück und geben Sie am Ende NULL zurück .
Einfacher Code für die Verwaltung von Studenteninformationen
Ich kann mich beim bloßen Ansehen nicht daran erinnern, also habe ich diese Funktionen verwendet, um eine Benutzeroberfläche für die Verwaltung von Studenteninformationen zu schreiben, leider dieses Mal JahrC Was die Gestaltung von Sprachkursen betrifft, wusste ich damals noch nicht, wie man eine Datenbank verwendet, und alles war in Dateien geschrieben. Als ich herausfand, dass es zu spät war, bereute ich es. . . . Das Folgende ist der Code:
/************************************************************************* > File Name: student.cpp > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 16时50分34秒 ************************************************************************/ #include <iostream> #include <string> #include <stack> #include <algorithm> #include <sstream> #include <mysql/mysql.h> #include <unistd.h> using namespace std; MYSQL mysql; MYSQL_ROW row; MYSQL_FIELD* field = NULL; MYSQL_RES* result; string IntToStr(int num) { stringstream ss; ss.clear(); ss << num; return ss.str(); } void Add() { string fname,fsex,ftel,faddr; int fage; char choice; do { ┊ cout << "请依次输入以下信息:" << endl; ┊ cout << "\nName: ";cin >> fname; ┊ cout << "\nSex: ";cin >> fsex; ┊ cout << "\nAge: "; cin >> fage; ┊ cout << "\nTel: "; cin >> ftel; ┊ cout << "\nAddr: "; cin >> faddr; ┊ string sql = "INSERT INTO Infor (name,sex,tel,addr,age) values('"+fname+"','"+fsex+"','"+ftel+"','"+faddr+"', "+IntToStr(fage)+");"; ┊ //string sql = "INSERT INTO Infor (name,sex,age,tel,addr) values('小红','女',18,'13333333333', '陕西省西安市雁塔区');"; ┊ mysql_query(&mysql,sql.c_str()); ┊ ┊ ┊ cout << "是否继续添加(y/n)?: "; ┊ cin >> choice; }while(choice == 'y'); } void Select() { int id; cout << "请输入要查询学生的学号: "; cin >> id; string sql = "SELECT * FROM Infor WHERE id = "+IntToStr(id)+";"; mysql_query(&mysql,sql.c_str()); result = mysql_store_result(&mysql); if(result == NULL) ┊ cout << "fail\n"; for(int i=0; i<mysql_num_fields(result); i++) { ┊ field = mysql_fetch_field_direct(result,i); ┊ cout << field->name << "\t\t"; } cout << endl; row = mysql_fetch_row(result); while(row != NULL) { ┊ for(int i=0; i<mysql_num_fields(result); i++) ┊ { ┊ ┊ cout << row[i] << "\t\t"; ┊ } ┊ cout << endl; ┊ row = mysql_fetch_row(result); } } void Update() { int id; char choice; string newaddr; ┊ cout << "请输入要修改同学的学号: "; ┊ cin >> id; ┊ cout << endl << "请输入修改后的地址: "; ┊ cin >> newaddr; ┊ string sql = "UPDATE Infor SET addr = '"+newaddr+"'WHERE id= "+IntToStr(id)+"; "; ┊ mysql_query(&mysql,sql.c_str()); ┊ } int main() { char choice[5]; mysql_init(&mysql); /*连接数据库*/ if(!mysql_real_connect(&mysql,"localhost","root","dxm242012","Student",0,NULL,0)) { ┊ cout << "connect fial\n"; ┊ return -1; } while(atoi(choice) != 'q') { ┊ sleep(4); ┊ system("clear"); ┊ cout << "1.添加学生信息" << endl; ┊ cout << "2.查询学生信息" << endl; ┊ cout << "3.修改学生信息" << endl; ┊ cin >> choice; ┊ cout << choice << endl; ┊ switch(atoi(choice)) ┊ { ┊ ┊ case 1: ┊ ┊ ┊ Add(); ┊ ┊ ┊ break; ┊ ┊ case 2: ┊ ┊ ┊ Select(); ┊ ┊ ┊ break; ┊ ┊ case 3: ┊ ┊ ┊ Update(); ┊ ┊ ┊ break; ┊ ┊ default: ┊ ┊ ┊ break; ┊ } } mysql_close(&mysql); return 0; }
/************************************************************************* > File Name: myDB.h > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 22时26分22秒 ************************************************************************/ #ifndef _MYDB_H #define _MYDB_H #include <string> #include <iostream> #include <mysql/mysql.h> using namespace std; class MyDB { public: MyDB(); ~MyDB(); bool InitDB(string host,string user,string pwd,string dbname); bool ExeSQL(string sql); private: MYSQL* mysql; MYSQL* mysql; MYSQL_ROW row; MYSQL_RES* result; MYSQL_FIELD* field; }; #endif /************************************************************************* > File Name: myDB.cpp > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 22时27分18秒 ************************************************************************/ #include <iostream> #include <string> #include <stack> #include <algorithm> #include <mysql/mysql.h> #include "myDB.h" using namespace std; MyDB::MyDB() { mysql = mysql_init(NULL); if(mysql == NULL) { ┊ cout << "Error: " << mysql_error(mysql); ┊ exit(-1); } } MyDB::~MyDB() { if(!mysql) { ┊ mysql_close(mysql); } } bool MyDB::InitDB(string host,string user,string pwd,string dbname) { /*连接数据库*/ if(!mysql_real_connect(mysql,host.c_str(),user.c_str(),pwd.c_str(),dbname.c_str(),0,NULL,0)) { ┊ cout << "connect fial: " << mysql_error(mysql); ┊ exit(-1); } return true; } bool MyDB::ExeSQL(string sql) { /*执行失败*/ if(mysql_query(mysql,sql.c_str())) { ┊ cout << "query fail: " << mysql_error(mysql); ┊ exit(1); } else { ┊ /*获取结果集*/ ┊ result = mysql_store_result(mysql); ┊ int fieldnum = mysql_num_fields(result); ┊ for(int i=0; i<fieldnum; i++) ┊ { ┊ ┊ row = mysql_fetch_row(result); ┊ ┊ if(row <= 0) ┊ ┊ ┊ break; ┊ ┊ for(int j=0; j<fieldnum; j++) ┊ ┊ { ┊ ┊ ┊ cout << row[j] << "\t\t"; ┊ ┊ } ┊ ┊ cout << endl; ┊ } ┊ mysql_free_result(result); } return true; } /************************************************************************* > File Name: main.cpp > Author: Tanswer_ > Mail: 98duxm@gmail.com > Created Time: 2017年05月28日 星期日 22时53分43秒 ************************************************************************/ #include <iostream> #include <string> #include <stack> #include <algorithm> #include <mysql/mysql.h> #include "myDB.h" using namespace std; int main() { MyDB db; db.InitDB("localhost","root","xxxxxx","Student"); db.ExeSQL("SELECT * FROM Infor;"); return 0; }
1 Fehler beim Kompilieren
Da Gibt es keine solche Datei oder kein solches Verzeichnis?
#include<mysql/mysql.h> ^
Lösung: Zusätzlich zu mysql-client und mysql-server
mysql-devel installiert und dann wurde das Problem gelöst.
Variable an die SQL-Anweisung übergeben wird, tritt ein Problem auf
在网上查找到这样一种格式,
string sql = "INSERT INTO Infor (name,sex,tel,addr,age) values('"+fname+"','"+fsex+"','"+ftel+"','"+faddr+"', "+IntToStr(fage)+");";
然后string类型的可以成功,整型的变量还是不行,我又写了个函数把int转为string。
string IntToStr(int num) { stringstream ss; ss.clear(); ss << num; return ss.str(); }
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Implementierung des C++-Betriebs einer MySQL-Datenbank unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

C Gründe für die kontinuierliche Verwendung sind seine hohe Leistung, breite Anwendung und sich weiterentwickelnde Eigenschaften. 1) Leistung mit hoher Effizienz. 2) weit verbreitete: Glanz in den Feldern der Spieleentwicklung, eingebettete Systeme usw. 3) Kontinuierliche Entwicklung: Seit seiner Veröffentlichung im Jahr 1983 hat C weiterhin neue Funktionen hinzugefügt, um seine Wettbewerbsfähigkeit aufrechtzuerhalten.

Wie verbinde ich mit PhpMyAdmin mit MySQL? Die URL zum Zugriff auf phpmyadmin ist normalerweise http: // localhost/phpmyadmin oder http: // [Ihre Server -IP -Adresse]/Phpmyadmin. Geben Sie Ihren MySQL -Benutzernamen und Ihr Passwort ein. Wählen Sie die Datenbank aus, mit der Sie eine Verbindung herstellen möchten. Klicken Sie auf die Schaltfläche "Verbindung", um eine Verbindung herzustellen.

Zu den Schritten zum Starten eines Redis -Servers gehören: Installieren von Redis gemäß dem Betriebssystem. Starten Sie den Redis-Dienst über Redis-Server (Linux/macOS) oder redis-server.exe (Windows). Verwenden Sie den Befehl redis-cli ping (linux/macOS) oder redis-cli.exe ping (Windows), um den Dienststatus zu überprüfen. Verwenden Sie einen Redis-Client wie Redis-Cli, Python oder Node.js, um auf den Server zuzugreifen.

PHPMYADMIN ist nicht nur ein Datenbankmanagement -Tool, sondern auch ein tiefes Verständnis für MySQL und die Verbesserung der Programmierfähigkeiten. Zu den Kernfunktionen gehören die Ausführung von CRUD und SQL Query, und es ist wichtig, die Prinzipien von SQL -Aussagen zu verstehen. Zu den erweiterten Tipps gehören das Exportieren/Importieren von Daten und das Erlaubnismanagement, das ein tiefes Sicherheitsverständnis erfordert. Zu den potenziellen Problemen zählen die SQL -Injektion und die Lösung sind parametrisierte Abfragen und Sicherungen. Die Leistungsoptimierung beinhaltet die Optimierung der SQL -Anweisung und die Indexnutzung. Best Practices betonen die Codespezifikationen, Sicherheitspraktiken und regelmäßige Backups.

Der Schlüssel zur Strategie zur Sicherheitsverteidigungsstrategie von PhpMyAdmin ist: 1. Verwenden Sie die neueste Version von PHPMYADMIN und aktualisieren Sie regelmäßig PHP und MySQL. 2. Strikt kontrollieren Sie Zugriffsrechte, verwenden Sie .htaccess oder Web Server Access Control; 3. Aktivieren Sie ein starkes Kennwort und die Zwei-Faktor-Authentifizierung; 4. Sichern Sie die Datenbank regelmäßig; 5. Überprüfen Sie die Konfigurationsdateien sorgfältig, um zu vermeiden, dass sensible Informationen aufgedeckt werden. 6. Verwenden Sie die Firewall (Web Application Firewall); 7. Führen Sie Sicherheitsaudits durch. Diese Maßnahmen können die durch phpmyadmin verursachten Sicherheitsrisiken aufgrund unzulässiger Konfiguration, über alter Version oder Umgebungssicherheitsrisiken effektiv verringern und die Sicherheit der Datenbank sicherstellen.

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

Die fünf Säulen des Linux -Systems sind: 1. Kernel, 2. Systembibliothek, 3. Shell, 4. Dateisystem, 5. Systemwerkzeuge. Der Kernel verwaltet Hardware -Ressourcen und bietet grundlegende Dienste an. Die Systembibliothek bietet vorkompilierte Funktionen für Anwendungen. Die Shell ist die Schnittstelle, in der Benutzer mit dem System interagieren können. Das Dateisystem organisiert und speichert Daten. und Systemwerkzeuge werden für das Systemmanagement und die Wartung verwendet.
