MySQL 関数 — プログラミング言語 Ring 1.14 取扱説明書

Skip to content

# MySQL 関数

MySQL 関数の用法です。

- MySQL_Info()

- MySQL_Init()

- MySQL_Error()

- MySQL_Connect()

- MySQL_Close()

- MySQL_Query()

- MySQL_Insert_ID()

- MySQL_Result()

- MySQL_Next_Result()

- MySQL_Columns()

- MySQL_Result2()

- MySQL_Escape_String()

- MySQL_AutoCommit()

- MySQL_Commit()

- MySQL_Rollback()

この関数の使用前に mysqllib.ring ライブラリを読み込みます。

    load "mysqllib.ring"
    # MySQL 関数の使用

## MySQL_Info() 関数

MySQL_Info() 関数は MySQL クライアントのバージョンを取得します。

文法:

    MySQL_Info() ---> MySQL のバージョン文字列

用例:

    see "MySQL Client Version : " + mysql_info()

実行結果:

    MySQL Client Version : 6.1.5

## MySQL_Init() 関数

MySQL_Init() 関数により MySQL クライアントを使用します。

文法:

    MySQL_Init() ---> MySQL ハンドル

## MySQL_Error() 関数

MySQL_Error() 関数は MySQL クライアントからエラーメッセージを取得します。

文法:

    MySQL_Error(MySQL ハンドル) ---> エラーメッセージの文字列

## MySQL_Connect() 関数

MySQL_Connect() 関数は MySQL データベースのサーバーへ接続します。

文法:

    MySQL_Connect(MySQL ハンドル, cServer, cUserName, cPassword) ---> lStatus

## MySQL_Close() 関数

MySQL_Close() 関数は MySQL データベースの接続を閉じます。

文法:

    MySQL_Close(MySQL ハンドル)

## MySQL_Query() 関数

MySQL_Query() 関数は SQL のクエリを実行します。

文法:

    MySQL_Query(MySQL ハンドル, cSQLQuery)

## データベースの作成

この用例は MySQL サーバーへ接続後に新しいデータベースを作成します。

    See "MySQL Test - Create Database" + nl
    con = mysql_init()

    See "Connect" + nl
    if mysql_connect(con,"localhost","root","root") = 0
            see "Cann't connect" + nl
            see "Error : " + mysql_error(con) + nl
            mysql_close(con)
            bye
    ok

    See "Create Database..." + nl
    mysql_query(con,"CREATE DATABASE mahdb")

    See "Close Connection" + nl
    mysql_close(con)

実行結果:

    MySQL Test - Create Database
    Connect
    Create Database...
    Close Connection

## テーブルの作成とデータの挿入

この用例は新しいテーブルの作成、およびレコードの挿入を行います。

    func main
            see "Create Table and Insert Records" + nl
            con = mysql_init()

            see "Connect" + nl
            if mysql_connect(con, "localhost", "root", "root","mahdb") = 0
                    system_error(con)
            ok

            see "Drop table" + nl
            if mysql_query(con, "DROP TABLE IF EXISTS Employee")  system_error(con) ok

            see "Create table" + nl
            if mysql_query(con, "CREATE TABLE Employee(Id INT, Name TEXT, Salary INT)")
               system_error(con) ok

            see "Insert data" + nl
            if mysql_query(con, "INSERT INTO Employee VALUES(1,'Mahmoud',15000)")
               system_error(con) ok

            if mysql_query(con, "INSERT INTO Employee VALUES(2,'Samir',16000)")
               system_error(con) ok

            if mysql_query(con, "INSERT INTO Employee VALUES(3,'Fayed',17000)")
               system_error(con) ok

            see "Close connection" + nl
            mysql_close(con)

    func system_error con
            see mysql_error(con)  mysql_close(con)  bye

実行結果:

    Create Table and Insert Records
    Connect
    Drop table
    Create table
    Insert data
    Close connection

## MySQL_Insert_ID() 関数

MySQL_Insert_ID() 関数は挿入された列の ID を取得します。

文法:

    MySQL_Insert_ID() ---> 数値により挿入された列の ID

用例:

    con = mysql_init()
    see "connect to database" + nl
    mysql_connect(con,"localhost","root","root","mahdb")
    see "drop table" + nl
    mysql_query(con, "DROP TABLE IF EXISTS Customers")
    see "create table" + nl
    mysql_query(con, "CREATE TABLE Customers(Id INT PRIMARY KEY AUTO_INCREMENT, Name TEXT)")
    see "insert record" + nl
    mysql_query(con, "INSERT INTO Customers(Name) VALUES('Mahmoud')")
    see "insert record" + nl
    mysql_query(con, "INSERT INTO Customers(Name) VALUES('Samir')")
    see "insert record" + nl
    mysql_query(con, "INSERT INTO Customers(Name) VALUES('Fayed')")
    see "insert record" + nl
    mysql_query(con, "INSERT INTO Customers(Name) VALUES('Test 2015')")

    see "inserted row id : " + mysql_insert_id(con) + nl
    see "close database" + nl
    mysql_close(con)

実行結果:

    connect to database
    drop table
    create table
    insert record
    insert record
    insert record
    insert record
    inserted row id : 4
    close database

## MySQL_Result() 関数

MySQL_Result() 関数はクエリの結果 (カラム名を除くデータ) を取得します。

文法:

    MySQL_Result(MySQL ハンドル) ---> クエリの結果を有するリスト

## MySQL_Next_Result() 関数

MySQL_Next_Result() 関数は次のクエリの結果を移動します。 この関数は同じクエリで複数の SQL ステートメントがあるときに使用します。

文法:

    MySQL_Next_Result(MySQL ハンドル)

## クエリの結果を表示するには

この用例はデータベースでクエリを実行後に結果を表示します。

    con = mysql_init()
    see "Connect to database" + nl
    mysql_connect(con, "localhost", "root", "root","mahdb")
    see "Execute Query" + nl
    mysql_query(con, "SELECT Name FROM Employee WHERE Id=1;"+
                     "SELECT Name FROM Employee WHERE Id=3")
    see "Print Result" + nl
    see mysql_result(con)
    mysql_next_result(con)
    see mysql_result(con)
    see "close database" + nl
    mysql_close(con)

実行結果:

    Connect to database
    Execute Query
    Print Result
    Mahmoud
    Fayed
    close database

## MySQL_Columns() 関数

MySQL_Columns() 関数はカラム名のリストを取得します。

文法:

    MySQL_Columns(MySQL ハンドル) ---> カラムの情報を有するリスト

用例:

    con = mysql_init()
    see "Connect to database" + nl
    mysql_connect(con, "localhost", "root", "root","mahdb")
    see "Execute Query" + nl
    mysql_query(con, "SELECT * FROM Employee")
    see "Result" + nl
    see mysql_columns(con)
    see "Close database" + nl
    mysql_close(con)

実行結果:

    Connect to database
    Execute Query
    Result
    Id
    11
    3
    32768
    Name
    65535
    252
    16
    Salary
    11
    3
    32768
    Close database

## MySQL_Result2() 関数

MySQL_Result() でカラム名がないデータの結果を取得するのではなく MySQL_Result2() は、 カラム名を全て取得した後にクエリの結果を一つのリストにします。

文法:

    MySQL_Result2(MySQL ハンドル) ---> リスト (カラム名を除いたクエリの結果)

用例:

    con = mysql_init()
    see "Connect to database" + nl
    mysql_connect(con, "localhost", "root", "root","mahdb")
    see "Execute Query" + nl
    mysql_query(con, "SELECT * FROM Employee")
    see "Print Result" + nl
    see mysql_result2(con)
    see "Close database" + nl
    mysql_close(con)

実行結果:

    Connect to database
    Execute Query
    Print Result
    Id
    Name
    Salary
    1
    Mahmoud
    15000
    2
    Samir
    16000
    3
    Fayed
    17000
    Close database

## MySQL_Escape_String() 関数

MySQL_Escape_String() 関数は処理後に、 バイナリデータまたは特殊文字をデータベースへ格納します。

文法:

    MySQL_Escape_String(MySQL ハンドル, cString) ---> 処理後の文字列

## データベースのイメージを保存するには

用例:

    See "Read file" + nl
    cFile = read("tests\mahmoud.jpg")
    con = mysql_init()
    See "Connect to database..." + nl
    mysql_connect(con, "localhost", "root", "root","mahdb")
    See "Escape string..." + nl
    cFile = mysql_escape_string(con,cFile)
    stmt = "INSERT INTO photo(id, data) VALUES(1, '" + cFile + "')"
    See "Insert data..." + nl
    mysql_query(con,stmt)
    See "Close database..." + nl
    mysql_close(con)

実行結果:

    Read file
    Connect to database...
    Escape string...
    Insert data...
    Close database...

## データベースからイメージを復元するには

用例:

    con = mysql_init()
    See "Connect to database..." + nl
    mysql_connect(con, "localhost", "root", "root","mahdb")
    See "Read data from database..." + nl
    mysql_query(con,"SELECT data FROM photo WHERE id=1")
    See "Write new file" + nl
    result = mysql_result(con)
    write("tests\mahmoud2.jpg",result[1][1])
    See "Close database..." + nl
    mysql_close(con)

実行結果:

    Connect to database...
    Read data from database...
    Write new file
    Close database...

## MySQL_AutoCommit() 関数

MySQL_AutoCommit() 関数は自動コミット機能の有効、または無効化を指定します。

文法:

    MySQL_AutoCommit(MySQL ハンドル, lStatus)  # lStatus には True または False を指定します。

## MySQL_Commit() 関数

MySQL_Commit() 関数はデータベースへ更新をコミットします。

文法:

    MySQL_Commit(MySQL ハンドル)

## MySQL_Rollback() 関数

MySQL_Rollback() 関数はデータベースのロールバックを更新します。

文法:

    MySQL_Rollback(MySQL ハンドル)

## トランザクションの用例

この用例では、 MySQL_Autocommit(), MySQL_Commit() および、 MySQL_RollBack() の用法です。

用例:

    func main

            con = mysql_init()

            see "Connect" + nl
            if mysql_connect(con, "localhost", "root", "root","mahdb") = 0
                    system_error(con) ok

            see "Drop table" + nl
            if mysql_query(con, "DROP TABLE IF EXISTS Employee2")
                    system_error(con) ok

            see "Create table" + nl
            if mysql_query(con, "CREATE TABLE Employee2(Id INT, Name TEXT, Salary INT)")
                    system_error(con) ok

            see "Insert data" + nl
            if mysql_query(con, "INSERT INTO Employee2 VALUES(1,'Mahmoud',15000)")
                    system_error(con) ok

            if mysql_query(con, "INSERT INTO Employee2 VALUES(2,'Samir',16000)")
                    system_error(con) ok

            if mysql_query(con, "INSERT INTO Employee2 VALUES(3,'Fayed',17000)")
                    system_error(con) ok

            mysql_autocommit(con,False)
            mysql_query(con, "INSERT INTO Employee2 VALUES(4,'Ahmed',5000)")
            mysql_query(con, "INSERT INTO Employee2 VALUES(5,'Ibrahim',50000)")
            mysql_query(con, "INSERT INTO Employee2 VALUES(6,'Mohammed',50000)")
            See "Save transaction (y/n) " give nChoice
            if upper(nChoice) = "Y"
                    mysql_commit(con)
            else
                    mysql_rollback(con)
            ok

            see "Close connection" + nl
            mysql_close(con)

    func system_error con

            see mysql_error(con)
            mysql_close(con)
            bye

実行結果:

    Connect
    Drop table
    Create table
    Insert data
    Save transaction (y/n) y
    Close connection