ホームページ  >  記事  >  データベース  >  MySQL を始めるための時間関連の関数

MySQL を始めるための時間関連の関数

黄舟
黄舟オリジナル
2017-01-19 15:46:171197ブラウズ

バイナリ プロトコルでは、MYSQL_TIME 構造体を使用して日付と時刻の値 (DATE、TIME、DATETIME、TIMESTAMP) を送受信できます。この構造体のメンバーについては、セクション25.2.5「C API プリペアドステートメントのデータ型」で説明されています。

一時データ値を送信するには、mysql_stmt_prepare() を使用して準備されたステートメントを作成できます。次に、mysql_stmt_execute() を呼び出してステートメントを実行する前に、次の手順を使用して各一時パラメーターを設定できます:

データ値に関連する MYSQL_BIND 構造で、buffer_type メンバーを対応するタイプに設定します。値のタイプが送信されます。 DATE、TIME、DATETIME、または TIMESTAMP 値の場合、buffer_type をそれぞれ MYSQL_TYPE_DATE、MYSQL_TYPE_TIME、MYSQL_TYPE_DATETIME、または MYSQL_TYPE_TIMESTAMP に設定します。

MYSQL_BIND 構造体のバッファー メンバーを、一時値を渡すために使用される MYSQL_TIME 構造体のアドレスに設定します。

渡す予定の一時サポートのタイプに一致するように、MYSQL_TIME 構造体のメンバーを入力します。

mysql_stmt_bind_param() を使用してパラメータデータをステートメントにバインドします。その後、Mysql_stmt_execute() を呼び出すことができます。

一時値を取得するには、同様の手順に従いますが、buffer_type メンバーを受け入れる予定の値のタイプに設定し、buffer メンバーを戻り値を配置する MYSQL_TIME 構造体のアドレスに設定します。 mysql_stmt_execute() を呼び出した後、結果を取得する前に、mysql_bind_results() を使用してバッファをステートメントにバインドします。

具体的にコードを見てください:

#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);
}

上記は、MySQL を始めるための時間関連関数の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。