Mit dem Binärprotokoll können Sie Datums- und Uhrzeitwerte (DATE, TIME, DATETIME und TIMESTAMP) mithilfe der MYSQL_TIME-Struktur senden und empfangen. Die Mitglieder dieser Struktur werden in Abschnitt 25.2.5, „Datentypen für vorbereitete C-API-Anweisungen“ beschrieben.
Um temporäre Datenwerte zu senden, können Sie mysql_stmt_prepare() verwenden, um vorbereitete Anweisungen zu erstellen. Bevor Sie dann mysql_stmt_execute() aufrufen, um die Anweisung auszuführen, können Sie die folgenden Schritte verwenden, um jeden temporären Parameter festzulegen:
Setzen Sie in der MYSQL_BIND-Struktur, die dem Datenwert zugeordnet ist, das buffer_type-Mitglied auf den entsprechenden Typ Gibt den Typ des gesendeten temporären Werts an. Setzen Sie für DATE-, TIME-, DATETIME- oder TIMESTAMP-Werte buffer_type auf MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME bzw. MYSQL_TYPE_TIMESTAMP.
Setzen Sie das Puffermitglied der MYSQL_BIND-Struktur auf die Adresse der MYSQL_TIME-Struktur, die zur Übergabe temporärer Werte verwendet wird.
Füllen Sie die Mitglieder der MYSQL_TIME-Struktur so aus, dass sie dem Typ der temporären Unterstützung entsprechen, die übergeben werden soll.
Verwenden Sie mysql_stmt_bind_param(), um Parameterdaten an eine Anweisung zu binden. Anschließend kann Mysql_stmt_execute() aufgerufen werden.
Um einen temporären Wert abzurufen, führen Sie ähnliche Schritte aus, aber setzen Sie das buffer_type-Mitglied auf den Typ des Werts, den Sie akzeptieren möchten, und setzen Sie das buffer-Mitglied auf die Adresse der MYSQL_TIME-Struktur, in die der Rückgabewert aufgenommen werden soll platziert werden. Verwenden Sie nach dem Aufruf von mysql_stmt_execute() und vor dem Abrufen der Ergebnisse mysql_bind_results(), um den Puffer an die Anweisung zu binden.
Sehen Sie sich den Code genau an:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dlfcn.h> #include <mysql/mysql.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <termios.h> #include <mysql/mysql.h> int main() { int ret = 0, status = 0; MYSQL *mysql; MYSQL_RES *result; mysql =mysql_init(NULL); mysql =mysql_real_connect(mysql, "localhost", "root", "123456", "mydb2", 0, NULL, CLIENT_MULTI_STATEMENTS ); if (mysql == NULL) { ret = mysql_errno(mysql); printf("%s", mysql_error(mysql)); printf("func mysql_real_connect() err :%d\n", ret); return ret; } else { printf(" ok......\n"); } MYSQL_TIME ts; MYSQL_BIND bind[3]; MYSQL_STMT *stmt; //注意: // 创建的表语句 // create table test_table (date_field date, time_field time, timestamp_field timestamp ); char query[1024] = "INSERT INTO test_table(date_field, time_field, timestamp_field) VALUES(?,?,?)"; stmt = mysql_stmt_init(mysql); if (!stmt) { fprintf(stderr, " mysql_stmt_init(), out of memory\n"); exit(0); } if (mysql_stmt_prepare(stmt, query, strlen(query))) { fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed"); fprintf(stderr, "\n %s", mysql_stmt_error(stmt)); exit(0); } /* set up input buffers for all 3 parameters */ bind[0].buffer_type= MYSQL_TYPE_DATE; bind[0].buffer= (char *)&ts; bind[0].is_null= 0; bind[0].length= 0; // bind[1]= bind[2]= bind[0]; //... mysql_stmt_bind_param(stmt, bind); /* supply the data to be sent in the ts structure */ ts.year= 2002; ts.month= 02; ts.day= 03; ts.hour= 10; ts.minute= 45; ts.second= 20; mysql_stmt_execute(stmt); // Close the statement // if (mysql_stmt_close(stmt)) { fprintf(stderr, " failed while closing the statement\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } mysql_close(mysql); }
Das Obige ist der Inhalt zeitbezogener Funktionen für den Einstieg in MySQL. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!