A Scripting Language for Web, Linux and Windows

A Scripting Language for Web, Linux and Windows

Example: Connect to MySQL database

Demonstrates Native function calling to work with MySQL databases.
Note: MySQL functions are defined also in lib/mysql.inc.v1

<?v1
error_reporting 
(0);

// Connection parameters
const MYSQL_HOST "localhost";
const 
MYSQL_PORT 3306;
const 
MYSQL_USER "root";
const 
MYSQL_PASSWORD "";
const 
MYSQL_DATABASE "mysql";

// Replace with correct path of MySQL client library 
// libmysqlclient.so (32/64 Bit) on Linux or libmySQL.dll (32 Bit) on Windows 
mySQLLibName =  'libmySQL';

hDLLMySQL dl (mySQLLibNametrue);
if (!
hDLLMySQL) {
    
// Search for libraries
    
libList explode ("\n"system ('/usr/bin/find /usr -name "libmysqlclient*.so*"'));
    if (isset (
libList[0])) {
        
hDLLMySQL dl (mySQLLibName libList[0], true);
    }
}

if (!
hDLLMySQL) {
    print (
"No MySQL client library found.");
    exit (
1);
}

// MySQL functions called with C-API
// https://github.com/google/mysql/blob/master/include/mysql.h

function mysql_init () {
    global 
hDLLMySQL;
    return 
call (hDLLMySQL"mysql_init", [['i'], 'p'],  null);
}

function 
mysql_connect (mysqlhostuserpassworddatabaseport=3306) {
    global 
hDLLMySQL;
    if (
call (hDLLMySQL"mysql_real_connect", [['p','s','s','s','s','i','i','i'], 'i'], mysqlhostuserpassworddatabaseportnull0))
        return 
mysql;
    return 
false;
}

function 
mysql_close (mysql) {
    global 
hDLLMySQL;
    return 
call (hDLLMySQL"mysql_close", [['p'], "i"],  mysql);
}

function 
mysql_query (mysqlsql) {
    global 
hDLLMySQL;
    if (!
call (hDLLMySQL"mysql_query", [['p','s'], 'i'],  mysqlsql)) {
        
result call (hDLLMySQL"mysql_store_result" , [['p'], 'p'], mysql);
        
fieldCnt call (hDLLMySQL"mysql_field_count" , [['p'], 'i'], mysql);
        if (
result && fieldCnt) {
            
headers = array ();
            for( 
0i<fieldCnti++) {
                
field call (hDLLMySQL"mysql_fetch_field" , [['p'], 'p'], result);
                
headers[i] = memat (binparse (memat (field,_ALIGN)));
            }
            return array (
resultheaders);
        }
        else {
            return 
true;
        }
    }
    return 
false;
}


function 
mysql_fetch_array (&result, &data) {
    global 
hDLLMySQL;
    if (
is_array (result) && (row call (hDLLMySQL"mysql_fetch_row",  [['p'], 'i'], result[0]))) {

        
data = array ();
        for (
i=0;i<count (result[1]);i++) {
            
pnt binparse(memat(row,_ALIGN));
            if (
pnt) {
                
data[result[1][i]]=memat (pnt);
            }
            
row+=_ALIGN;
        };
        return 
true;
    }
    return 
false;
}

function 
mysql_free_result (result) {
    global 
hDLLMySQL;
    if (
is_array (result))
        return 
call (hDLLMySQL"mysql_free_result", [['p'], 'i'],  result[0]);
    return 
true;
}

function 
mysql_error (mysql) {
    global 
hDLLMySQL;
    return 
call (hDLLMySQL"mysql_error", [['p'], 's'], mysql);
}

function 
mysql_get_client_info (mysql) {
    global 
hDLLMySQL;
    return 
call (hDLLMySQL"mysql_get_client_info", [['p'], 's'], mysql);
}

function 
mysql_get_server_info (mysql) {
    global 
hDLLMySQL;
    return 
call (hDLLMySQL"mysql_get_server_info", [['i'], "s"], mysql);
}

print (
"Library: "mySQLLibName);


// Connect to database and read table
mysql mysql_init ();

if (
mysql && mysql_connect (mysqlMYSQL_HOSTMYSQL_USERMYSQL_PASSWORDMYSQL_DATABASEMYSQL_PORT))
{
    print (
        
"Connected to MySQL Server "
        
mysql_get_server_info (mysql), 
        
" with Client "
        
mysql_get_client_info (mysql)
      );

    
mysql_query (mysql"set names utf8");

    
// Query a table
    
if ( result=mysql_query (mysql"select * from user")) {
        
data = array ();

        while (
mysql_fetch_array (resultdata)) {
            print (
data["Host"], ";"data["User"]);
        }

        
mysql_free_result (result);
    }
    else {
        print (
mysql_error (mysql));
    }
}
else {
    print (
mysql_error (mysql));
}
mysql_close (mysql);

?>

back to Home