j'ai une appli à faire qui doit obligatoirement tourner en unicode, j'ai pris l'option MySQL pour la gestion de la bdb et j'utilise le wrapper suivant (fait par flype, merci à lui) ainsi que son exemple :
Code : Tout sélectionner
;-
;- File: libmysql.pbi
;- Version: 2.0
;- Author: flype - flype44(at)gmail.com
;- Modified: flaith (24.07.2009)
;-
;- About: MySQL Interface for Purebasic 4.3.
;-
;- updated: p-utf8 format (for unicode or ascii)
EnableExplicit
;-
;- Private - MySQL API
;-
#MYSQL_NOERROR = 0
Enumeration 0 ; client
#CLIENT_COMPRESS
#CLIENT_FOUND_ROWS
#CLIENT_IGNORE_SPACE
#CLIENT_INTERACTIVE
#CLIENT_LOCAL_FILES
#CLIENT_MULTI_STATEMENTS
#CLIENT_MULTI_RESULTS
#CLIENT_NO_SCHEMA
#CLIENT_ODBC
#CLIENT_SSL
EndEnumeration
Enumeration 0 ; type
#MYSQL_TYPE_DECIMAL
#MYSQL_TYPE_TINY
#MYSQL_TYPE_SHORT
#MYSQL_TYPE_LONG
#MYSQL_TYPE_FLOAT
#MYSQL_TYPE_DOUBLE
#MYSQL_TYPE_NULL
#MYSQL_TYPE_TIMESTAMP
#MYSQL_TYPE_LONGLONG
#MYSQL_TYPE_INT24
#MYSQL_TYPE_DATE
#MYSQL_TYPE_TIME
#MYSQL_TYPE_DATETIME
#MYSQL_TYPE_YEAR
#MYSQL_TYPE_NEWDATE
#MYSQL_TYPE_VARCHAR
#MYSQL_TYPE_BIT
#MYSQL_TYPE_NEWDECIMAL = 246
#MYSQL_TYPE_ENUM
#MYSQL_TYPE_SET
#MYSQL_TYPE_TINY_BLOB
#MYSQL_TYPE_MEDIUM_BLOB
#MYSQL_TYPE_LONG_BLOB
#MYSQL_TYPE_BLOB
#MYSQL_TYPE_VAR_STRING
#MYSQL_TYPE_STRING
#MYSQL_TYPE_GEOMETRY
EndEnumeration
Structure MYSQL_FIELD
name.s
org_name.s
table.s
org_table.s
db.s
catalog.s
def.s
length.l
max_length.l
name_length.l
org_name_length.l
table_length.l
org_table_length.l
db_length.l
catalog_length.l
def_length.l
flags.l
decimals.l
charset_nr.l
Type.l
EndStructure
Structure MYSQL_FIELD_ARRAY
field.MYSQL_FIELD[0]
EndStructure
Structure MYSQL_LENGTH
*l.l[0]
EndStructure
Structure MYSQL_ROW
*field.s[0]
EndStructure
Import "libmysql.lib"
mysql_affected_rows(*mysql)
mysql_autocommit(*mysql, *mode.Byte)
mysql_change_user(*mysql, user.p-utf8, passwd.p-utf8, db.p-utf8)
mysql_character_set_name(*mysql)
mysql_close(*mysql)
mysql_commit(*mysql)
mysql_data_seek(*result, offset.d)
mysql_eof(*result)
mysql_errno(*mysql)
mysql_error(*mysql)
mysql_escape_string(*strTo, strFrom.p-utf8, length.l)
mysql_fetch_field(*result)
mysql_fetch_field_direct(*result, fieldnr.l)
mysql_fetch_fields(*result)
mysql_fetch_lengths(*result)
mysql_fetch_row(*result)
mysql_field_count(*mysql)
mysql_field_seek(*result, offset.l)
mysql_field_tell(*result)
mysql_free_result(*result)
mysql_get_character_set_info(*mysql, *charsetinfo)
mysql_get_client_info()
mysql_get_client_version()
mysql_get_host_info(*mysql)
mysql_get_parameters()
mysql_get_proto_info(*mysql)
mysql_get_server_info(*mysql)
mysql_get_server_version(*mysql)
mysql_hex_string(strTo.p-utf8, strFrom.p-utf8, length.l)
mysql_info(*mysql)
mysql_init(*mysql)
mysql_insert_id(*mysql)
mysql_kill(*mysql, pid.l)
mysql_list_dbs(*mysql, wild.p-utf8)
mysql_list_fields(*mysql, table.p-utf8, wild.p-utf8)
mysql_list_processes(*mysql)
mysql_list_tables(*mysql, wild.p-utf8)
mysql_master_query(*mysql, query.p-utf8, length.l)
mysql_more_results(*mysql)
mysql_next_result(*mysql)
mysql_num_fields(*result)
mysql_num_rows(*result)
mysql_options(*mysql, option.l, arg.p-utf8)
mysql_ping(*mysql)
mysql_query(*mysql, query.p-utf8)
mysql_read_query_result(*mysql)
mysql_real_connect(*mysql, host.p-utf8, user.p-utf8, passwd.p-utf8, db.p-utf8, port.l, unix_socket.p-utf8, flags.l)
mysql_real_escape_string(*mysql, *strTo, strFrom.p-utf8, length.l)
mysql_real_query(*mysql, query.p-utf8, length.l)
mysql_refresh(*mysql, Options.l)
mysql_reload(*mysql)
mysql_rollback(*mysql)
mysql_row_seek(*mysql, offset.l)
mysql_row_tell(*result)
mysql_select_db(*mysql, db.p-utf8)
mysql_store_result(*mysql)
EndImport
;-
;- Private - MySQL Interface
;-
Structure IMYSQL_VTABLE
*host
*proto
*client_long
*client_string
*server_long
*server_string
*affected_rows
*error
*escape_string
*field
*field_length
*field_length_max
*field_name
*field_reset
*field_type
*field_type_string
*free
*GetDate
*GetDateTime
*GetDouble
*GetFloat
*GetLong
*GetQuad
*GetString
*GetTime
*get_date
*get_date_string
*get_datetime
*get_datetime_string
*get_double
*get_float
*get_long
*get_quad
*get_string
*get_time
*get_time_string
*info
*insert_id
*num_fields
*num_rows
*ping
*query
*query_from_file
*query_xml
*query_xml_from_file
*row
*selectdb
*update
*update_from_file
;added 24/07/09
*autocommit
*commit
EndStructure
Structure SMYSQL
*vt.IMYSQL_VTABLE
*link
*result
*row.MYSQL_ROW
*field.MYSQL_FIELD
EndStructure
Interface IMYSQL
host.s()
proto.l()
client_long.l()
client_string.s()
server_long.l()
server_string.s()
affected_rows.l()
error.s()
escape_string.s(string.s)
field.l()
field_length.l()
field_length_max.l()
field_name.s()
field_reset.l()
field_type.l()
field_type_string.s()
free.l()
GetDate.l(name.s)
GetDateTime.l(name.s)
GetDouble.d(name.s)
GetFloat.f(name.s)
GetLong.l(name.s)
GetQuad.q(name.s)
GetString.s(name.s)
GetTime.l(name.s)
get_date.l(column.l = 0)
get_date_string.s(column.l = 0)
get_datetime.l(column.l = 0)
get_datetime_string.s(column.l = 0)
get_double.d(column.l = 0)
get_float.f(column.l = 0)
get_long.l(column.l = 0)
get_quad.q(column.l = 0)
get_string.s(column.l = 0)
get_time.l(column.l = 0)
get_time_string.s(column.l = 0)
info.s()
insert_id.l()
num_fields.l()
num_rows.l()
ping.l()
query.l(query.s)
query_from_file.l(fileIn.s)
query_xml(query.s, fileOut.s, table.l = #False, db.l = #False)
query_xml_from_file(fileIn.s, fileOut.s, table.l = #False, db.l = #False)
row.l()
selectdb.l(database.s)
update.l(query.s)
update_from_file.l(fileIn.s)
;added 24/07/09
autocommit(mode.l = #True)
commit.l()
EndInterface
Procedure.s PeekS_Utf8(*buffer) ;also checks if buffer is valid, returns an empty string if *buffer is 0
If *buffer
ProcedureReturn PeekS(*buffer, -1, #PB_UTF8)
Else
ProcedureReturn ""
EndIf
EndProcedure
Procedure.s mysql_name_string(*field.MYSQL_FIELD, db.l, table.l)
Protected result.s
If db
result + *field\db + "."
EndIf
If table
result + *field\table + "."
EndIf
ProcedureReturn result + *field\name
EndProcedure
Procedure.s mysql_type_string(Type.l)
Select Type
Case #MYSQL_TYPE_DECIMAL: ProcedureReturn "decimal"
Case #MYSQL_TYPE_TINY: ProcedureReturn "tiny"
Case #MYSQL_TYPE_SHORT: ProcedureReturn "short"
Case #MYSQL_TYPE_LONG: ProcedureReturn "long"
Case #MYSQL_TYPE_FLOAT: ProcedureReturn "float"
Case #MYSQL_TYPE_DOUBLE: ProcedureReturn "double"
Case #MYSQL_TYPE_NULL: ProcedureReturn "null"
Case #MYSQL_TYPE_TIMESTAMP: ProcedureReturn "timestamp"
Case #MYSQL_TYPE_LONGLONG: ProcedureReturn "longlong"
Case #MYSQL_TYPE_INT24: ProcedureReturn "int24"
Case #MYSQL_TYPE_DATE: ProcedureReturn "date"
Case #MYSQL_TYPE_TIME: ProcedureReturn "time"
Case #MYSQL_TYPE_DATETIME: ProcedureReturn "datetime"
Case #MYSQL_TYPE_YEAR: ProcedureReturn "year"
Case #MYSQL_TYPE_NEWDATE: ProcedureReturn "newdate"
Case #MYSQL_TYPE_VARCHAR: ProcedureReturn "varchar"
Case #MYSQL_TYPE_BIT: ProcedureReturn "bit"
Case #MYSQL_TYPE_NEWDECIMAL: ProcedureReturn "newdecimal"
Case #MYSQL_TYPE_ENUM: ProcedureReturn "enum"
Case #MYSQL_TYPE_SET: ProcedureReturn "set"
Case #MYSQL_TYPE_TINY_BLOB: ProcedureReturn "tinyblob"
Case #MYSQL_TYPE_MEDIUM_BLOB: ProcedureReturn "mediumblob"
Case #MYSQL_TYPE_LONG_BLOB: ProcedureReturn "longblob"
Case #MYSQL_TYPE_BLOB: ProcedureReturn "blob"
Case #MYSQL_TYPE_VAR_STRING: ProcedureReturn "varstring"
Case #MYSQL_TYPE_STRING: ProcedureReturn "string"
Case #MYSQL_TYPE_GEOMETRY: ProcedureReturn "geometry"
EndSelect
ProcedureReturn "unknown"
EndProcedure
Procedure.l db_affected_rows(*this.SMYSQL)
If *this And *this\link
mysql_affected_rows(*this\link)
EndIf
EndProcedure
Procedure.s db_error(*this.SMYSQL)
If *this And *this\link
If mysql_error(*this\link)
;ProcedureReturn PeekS(mysql_error(*this\link))
ProcedureReturn PeekS_Utf8(mysql_error(*this\link))
EndIf
EndIf
EndProcedure
Procedure.s db_escape_string(*this.SMYSQL, string.s)
Protected result.s
If *this And *this\link
result = Space((Len(string) + 2) * 2)
result = ReplaceString(Left(result, mysql_real_escape_string(*this\link, @result, string, Len(string))), #TAB$, "\t")
ProcedureReturn result
EndIf
EndProcedure
Procedure.l db_field(*this.SMYSQL)
If *this And *this\result
*this\field = mysql_fetch_field(*this\result)
ProcedureReturn *this\field
EndIf
EndProcedure
Procedure.l db_field_length(*this.SMYSQL)
If *this And *this\field
ProcedureReturn *this\field\length
EndIf
EndProcedure
Procedure.l db_field_length_max(*this.SMYSQL)
If *this And *this\field
ProcedureReturn *this\field\max_length
EndIf
EndProcedure
Procedure.s db_field_name(*this.SMYSQL)
If *this And *this\field
ProcedureReturn *this\field\name
EndIf
EndProcedure
Procedure.l db_field_reset(*this.SMYSQL)
If *this And *this\result
ProcedureReturn mysql_field_seek(*this\result, 0)
EndIf
EndProcedure
Procedure.l db_field_type(*this.SMYSQL)
If *this And *this\field
ProcedureReturn *this\field\type
EndIf
EndProcedure
Procedure.s db_field_type_string(*this.SMYSQL)
If *this And *this\field
ProcedureReturn mysql_type_string(*this\field\type)
EndIf
EndProcedure
Procedure.l db_free(*mysql.SMYSQL)
If *mysql
If *mysql\result
mysql_free_result(*mysql\result)
EndIf
If *mysql\link
mysql_close(*mysql\link)
EndIf
EndIf
EndProcedure
Procedure.l db_GetDate(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
ProcedureReturn ParseDate("%yyyy-%mm-%dd", *this\row\field[i])
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.l db_GetDateTime(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
ProcedureReturn ParseDate("%yyyy-%mm-%dd %hh:%ii:%ss", *this\row\field[i])
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.d db_GetDouble(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
ProcedureReturn ValD(*this\row\field[i])
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.f db_GetFloat(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
ProcedureReturn ValF(*this\row\field[i])
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.l db_GetLong(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
ProcedureReturn Val(*this\row\field[i])
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.q db_GetQuad(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
;ProcedureReturn ValQ(*this\row\field[i])
ProcedureReturn Val(*this\row\field[i])
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.s db_GetString(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
ProcedureReturn *this\row\field[i]
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.l db_GetTime(*this.SMYSQL, name.s)
Protected *field.MYSQL_FIELD, nFields.l, i.l
If *this\result And *this\row
nFields = mysql_num_fields(*this\result)
If nFields
mysql_field_seek(*this\result, 0)
For i = 0 To nFields - 1
*field = mysql_fetch_field(*this\result)
If *field\name = name
ProcedureReturn ParseDate("%hh:%ii:%ss", *this\row\field[i])
EndIf
Next
EndIf
EndIf
EndProcedure
Procedure.l db_get_date(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn ParseDate("%yyyy-%mm-%dd", *this\row\field[column])
EndIf
EndProcedure
Procedure.s db_get_date_string(*this.SMYSQL, column.l = 0)
If *this And *this\row
Protected date.l = ParseDate("%yyyy-%mm-%dd", *this\row\field[column])
If date <> -1
ProcedureReturn FormatDate("%dd-%mm-%yyyy", date)
EndIf
EndIf
EndProcedure
Procedure.l db_get_datetime(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn ParseDate("%yyyy-%mm-%dd %hh:%ii:%ss", *this\row\field[column])
EndIf
EndProcedure
Procedure.s db_get_datetime_string(*this.SMYSQL, column.l = 0)
If *this And *this\row
Protected datetime.l = ParseDate("%yyyy-%mm-%dd %hh:%ii:%ss", *this\row\field[column])
If datetime <> -1
ProcedureReturn FormatDate("%dd-%mm-%yyyy %hh:%ii:%ss", datetime)
EndIf
EndIf
EndProcedure
Procedure.d db_get_double(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn ValD(*this\row\field[column])
EndIf
EndProcedure
Procedure.f db_get_float(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn ValF(*this\row\field[column])
EndIf
EndProcedure
Procedure.l db_get_long(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn Val(*this\row\field[column])
EndIf
EndProcedure
Procedure.q db_get_quad(*this.SMYSQL, column.l = 0)
If *this And *this\row
;ProcedureReturn ValQ(*this\row\field[column])
ProcedureReturn Val(*this\row\field[column])
EndIf
EndProcedure
Procedure.s db_get_string(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn *this\row\field[column]
EndIf
EndProcedure
Procedure.l db_get_time(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn ParseDate("%hh:%ii:%ss", *this\row\field[column])
EndIf
EndProcedure
Procedure.s db_get_time_string(*this.SMYSQL, column.l = 0)
If *this And *this\row
ProcedureReturn *this\row\field[column]
EndIf
EndProcedure
Procedure.s db_info(*this.SMYSQL)
If *this And *this\link
If mysql_info(*this\link)
;ProcedureReturn PeekS(mysql_info(*this\link))
ProcedureReturn PeekS_Utf8(mysql_info(*this\link))
EndIf
EndIf
EndProcedure
Procedure.l db_insert_id(*this.SMYSQL)
If *this And *this\link
mysql_insert_id(*this\link)
EndIf
EndProcedure
Procedure.l db_num_fields(*this.SMYSQL)
If *this And *this\result
ProcedureReturn mysql_num_fields(*this\result)
EndIf
EndProcedure
Procedure.l db_num_rows(*this.SMYSQL)
If *this And *this\result
ProcedureReturn mysql_num_rows(*this\result)
EndIf
EndProcedure
Procedure.l db_ping(*this.SMYSQL)
If *this And *this\link
If mysql_ping(*this\link) = #MYSQL_NOERROR
ProcedureReturn #True
EndIf
EndIf
EndProcedure
Procedure.l db_query(*this.SMYSQL, query.s)
If *this And *this\link
If *this\result
mysql_free_result(*this\result)
EndIf
If mysql_real_query(*this\link, query, Len(query)) = #MYSQL_NOERROR
;If mysql_query(*this\link, query) = #MYSQL_NOERROR
*this\result = mysql_store_result(*this\link)
If *this\result
ProcedureReturn #True
EndIf
EndIf
EndIf
EndProcedure
Procedure.l db_query_from_file(*this.SMYSQL, fileIn.s)
Protected result.l, file.l, query.s
If *this And *this\link
If *this\result
mysql_free_result(*this\result)
EndIf
file = ReadFile(#PB_Any, fileIn)
If file
query = Space(Lof(file))
If ReadData(file, @query, Lof(file)) = Lof(file)
If mysql_real_query(*this\link, query, Len(query)) = #MYSQL_NOERROR
*this\result = mysql_store_result(*this\link)
If *this\result
result = #True
EndIf
EndIf
EndIf
CloseFile(file)
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure.l db_query_xml(*this.SMYSQL, query.s, fileOut.s, table.l = #False, db.l = #False)
Protected file.l, result.l, *result
Protected i.l, num_rows.l, *row.MYSQL_ROW
Protected j.l, num_fields.l, *field.MYSQL_FIELD
If *this And *this\link
If mysql_real_query(*this\link, query, Len(query)) = #MYSQL_NOERROR
*result = mysql_store_result(*this\link)
If *result
file = CreateFile(#PB_Any, fileOut)
If file
num_rows = mysql_num_rows(*result)
num_fields = mysql_num_fields(*result)
WriteStringN(file, "<?xml version='1.0' ?>")
WriteStringN(file, "<mysql>")
WriteStringN(file, " <date>" + FormatDate("%yyyy-%mm-%dd %hh:%ii:%ss", Date()) + "</date>")
WriteStringN(file, " <query>" + db_escape_string(*this, query) + "</query>")
WriteStringN(file, " <fields count='" + Str(num_fields) + "'>")
For j = 0 To num_fields - 1
*field = mysql_fetch_field(*result)
WriteStringN(file, " <field id='" + Str(j+1) + "' type='" + mysql_type_string(*field\Type) + "' length='" + Str(*field\length) + "' name='" + mysql_name_string(*field, db, table) + " />")
Next j
WriteStringN(file, " </fields>")
WriteStringN(file, " <rows count='" + Str(num_rows) + "'>")
For i = 0 To num_rows - 1
mysql_field_seek(*result, 0)
*row = mysql_fetch_row(*result)
WriteStringN(file, " <row id='" + Str(i+1) + "'>")
For j = 0 To num_fields - 1
*field = mysql_fetch_field(*result)
WriteString (file, " <" + mysql_name_string(*field, db, table) + ">")
WriteString (file, db_escape_string(*this, *row\field[j]))
WriteStringN(file, "</" + mysql_name_string(*field, db, table) + ">")
Next j
WriteStringN(file, " </row>")
Next i
WriteStringN(file, " </rows>")
WriteStringN(file, "</mysql>")
CloseFile(file)
result = #True
EndIf
mysql_free_result(*result)
EndIf
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure.l db_query_xml_from_file(*this.SMYSQL, fileIn.s, fileOut.s, table.l = #False, db.l = #False)
;**** to do
EndProcedure
Procedure.l db_row(*this.SMYSQL)
If *this And *this\result
*this\row = mysql_fetch_row(*this\result)
ProcedureReturn *this\row
EndIf
EndProcedure
Procedure.l db_selectdb(*this.SMYSQL, database.s)
If *this And *this\link And (mysql_select_db(*this\link, database) = #MYSQL_NOERROR)
ProcedureReturn #True
EndIf
EndProcedure
Procedure.l db_update(*this.SMYSQL, query.s)
If *this And *this\link
If mysql_real_query(*this\link, query, Len(query)) = #MYSQL_NOERROR
ProcedureReturn #True
EndIf
EndIf
EndProcedure
Procedure.l db_update_from_file(*this.SMYSQL, fileIn.s)
Protected result.l, file.l, query.s
If *this And *this\link
file = ReadFile(#PB_Any, fileIn)
If file
query = Space(Lof(file))
If ReadData(file, @query, Lof(file)) = Lof(file)
If mysql_real_query(*this\link, query, Len(query)) = #MYSQL_NOERROR
result = #True
EndIf
EndIf
CloseFile(file)
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure.s db_host(*this.SMYSQL)
If *this And *this\link
If mysql_get_host_info(*this\link)
;ProcedureReturn PeekS(mysql_get_host_info(*this\link))
ProcedureReturn PeekS_Utf8(mysql_get_host_info(*this\link))
EndIf
EndIf
EndProcedure
Procedure.l db_proto(*this.SMYSQL)
If *this And *this\link
ProcedureReturn mysql_get_proto_info(*this\link)
EndIf
EndProcedure
Procedure.l db_client_long(*this.SMYSQL)
If *this
ProcedureReturn mysql_get_client_version()
EndIf
EndProcedure
Procedure.s db_client_string(*this.SMYSQL)
If *this And mysql_get_client_info()
;ProcedureReturn PeekS(mysql_get_client_info())
ProcedureReturn PeekS_Utf8(mysql_get_client_info())
EndIf
EndProcedure
Procedure.l db_server_long(*this.SMYSQL)
If *this And *this\link
ProcedureReturn mysql_get_server_version(*this\link)
EndIf
EndProcedure
Procedure.s db_server_string(*this.SMYSQL)
If *this And *this\link
If mysql_get_server_info(*this\link)
;ProcedureReturn PeekS(mysql_get_server_info(*this\link))
ProcedureReturn PeekS_Utf8(mysql_get_server_info(*this\link))
EndIf
EndIf
EndProcedure
; added 24/07/09
Procedure.l db_autocommit(*this.SMYSQL, mode.l)
If *this And *this\link
If mysql_autocommit(*this\link, mode) = #MYSQL_NOERROR
ProcedureReturn #True
EndIf
EndIf
EndProcedure
Procedure.l db_commit(*this.SMYSQL)
If *this And *this\link
If mysql_commit(*this\link) = #MYSQL_NOERROR
ProcedureReturn #True
EndIf
EndIf
EndProcedure
;-
;- Public - MySQL Interface
;-
ProcedureDLL.l mysql(host.s = "localhost", user.s = "root", pwd.s = "", db.s = "", port.l = 3306, flags.l = #Null)
Protected *this.SMYSQL = AllocateMemory(SizeOf(SMYSQL))
If *this
*this\vt = AllocateMemory(SizeOf(IMYSQL_VTABLE))
If *this\vt
*this\link = mysql_init(#Null)
If *this\link
If mysql_real_connect(*this\link, host, user, pwd, db, port, "NULL", flags) = *this\link
*this\vt\host = @db_host()
*this\vt\proto = @db_proto()
*this\vt\client_long = @db_client_long()
*this\vt\client_string = @db_client_string()
*this\vt\server_long = @db_server_long()
*this\vt\server_string = @db_server_string()
*this\vt\affected_rows = @db_affected_rows()
*this\vt\error = @db_error()
*this\vt\escape_string = @db_escape_string()
*this\vt\field = @db_field()
*this\vt\field_length = @db_field_length()
*this\vt\field_length_max = @db_field_length_max()
*this\vt\field_name = @db_field_name()
*this\vt\field_reset = @db_field_reset()
*this\vt\field_type = @db_field_type()
*this\vt\field_type_string = @db_field_type_string()
*this\vt\free = @db_free()
*this\vt\GetDate = @db_GetDate()
*this\vt\GetDateTime = @db_GetDateTime()
*this\vt\GetDouble = @db_GetDouble()
*this\vt\GetFloat = @db_GetFloat()
*this\vt\GetLong = @db_GetLong()
*this\vt\GetQuad = @db_GetQuad()
*this\vt\GetString = @db_GetString()
*this\vt\GetTime = @db_GetTime()
*this\vt\get_date = @db_get_date()
*this\vt\get_date_string = @db_get_date_string()
*this\vt\get_datetime = @db_get_datetime()
*this\vt\get_datetime_string = @db_get_datetime_string()
*this\vt\get_double = @db_get_double()
*this\vt\get_float = @db_get_float()
*this\vt\get_long = @db_get_long()
*this\vt\get_quad = @db_get_quad()
*this\vt\get_string = @db_get_string()
*this\vt\get_time = @db_get_time()
*this\vt\get_time_string = @db_get_time_string()
*this\vt\info = @db_info()
*this\vt\insert_id = @db_insert_id()
*this\vt\num_fields = @db_num_fields()
*this\vt\num_rows = @db_num_rows()
*this\vt\ping = @db_ping()
*this\vt\query = @db_query()
*this\vt\query_from_file = @db_query_from_file()
*this\vt\query_xml = @db_query_xml()
*this\vt\query_xml_from_file = @db_query_xml_from_file()
*this\vt\row = @db_row()
*this\vt\selectdb = @db_selectdb()
*this\vt\update = @db_update()
*this\vt\update_from_file = @db_update_from_file()
*this\vt\autocommit = @db_autocommit()
*this\vt\commit = @db_commit()
ProcedureReturn *this
EndIf
mysql_close(*this\link) : *this\link = #Null
EndIf
FreeMemory(*this\vt) : *this\vt = #Null
EndIf
FreeMemory(*this) : *this = #Null
EndIf
EndProcedure
ProcedureDLL.l mysql_from_ini()
OpenPreferences("libmysql.ini")
PreferenceGroup("CONNECTION")
Protected db_host.s = ReadPreferenceString("host", "localhost")
Protected db_user.s = ReadPreferenceString("user", "root")
Protected db_pass.s = ReadPreferenceString("pass", #NULL$)
Protected db_base.s = ReadPreferenceString("base", #NULL$)
Protected db_port.l = ReadPreferenceLong ("port", 3306)
Protected db_opts.l = ReadPreferenceLong ("opts", #Null)
ClosePreferences()
ProcedureReturn mysql(db_host, db_user, db_pass, db_base, db_port, db_opts)
EndProcedure
DisableExplicit
;-
;- End Of File
;-
Code : Tout sélectionner
IncludePath #PB_Compiler_Home + "Includes\"
XIncludeFile "libmysql_utf8.pbi" ;Unicode ou ascii
db.IMYSQL = mysql("localhost","hotline", "", "mysql")
If db
If db\query("SELECT 'Hello' AS 'f1', 'World !' AS 'f2', NOW() as 'f3', 12345.6789")
While db\row()
Debug db\GetString("f1")
Debug db\GetString("f2")
Debug FormatDate("%dd.%mm.%yyyy", db\GetDate("f3"))
Debug db\get_double(3)
Wend
Else
Debug db\error()
EndIf
db\free()
EndIf
