From 7f1b21e561a16046b2fb09cf66fa72f8a9207cf0 Mon Sep 17 00:00:00 2001 From: michael Date: Tue, 11 Aug 2015 06:50:18 +0000 Subject: [PATCH] * Added example for parameter binding from Laco git-svn-id: trunk@31310 - --- .gitattributes | 1 + packages/mysql/examples/Makefile | 160 +++++++++++----------- packages/mysql/examples/Makefile.fpc | 2 +- packages/mysql/examples/testdb5.pp | 194 +++++++++++++++++++++++++++ 4 files changed, 276 insertions(+), 81 deletions(-) create mode 100644 packages/mysql/examples/testdb5.pp diff --git a/.gitattributes b/.gitattributes index f69f19fe79..c6d34242c4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5786,6 +5786,7 @@ packages/mysql/examples/mysqls.c svneol=native#text/plain packages/mysql/examples/mysqls.pp svneol=native#text/plain packages/mysql/examples/testdb3.pp svneol=native#text/plain packages/mysql/examples/testdb4.pp svneol=native#text/plain +packages/mysql/examples/testdb5.pp svneol=native#text/plain packages/mysql/fpmake.pp svneol=native#text/plain packages/mysql/scripts/mkdb svneol=native#text/plain packages/mysql/scripts/rmdb svneol=native#text/plain diff --git a/packages/mysql/examples/Makefile b/packages/mysql/examples/Makefile index 9994b96eea..2efdd07609 100644 --- a/packages/mysql/examples/Makefile +++ b/packages/mysql/examples/Makefile @@ -326,244 +326,244 @@ FPCFPMAKE=$(FPC) endif endif ifeq ($(FULL_TARGET),i386-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-win32) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-os2) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-beos) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-haiku) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-netware) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-emx) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-wince) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-nativent) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-iphonesim) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-android) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i386-aros) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-wii) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc-aix) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-netbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-solaris) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-openbsd) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-darwin) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-iphonesim) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),x86_64-dragonfly) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-darwin) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-wince) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-gba) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-nds) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),arm-android) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc64-darwin) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),powerpc64-aix) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),avr-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),armeb-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),armeb-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),mips-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),mipsel-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),mipsel-embedded) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),mipsel-android) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),jvm-java) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),jvm-android) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),i8086-msdos) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),aarch64-linux) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif ifeq ($(FULL_TARGET),aarch64-darwin) -override TARGET_PROGRAMS+=testdb4 mysqls testdb3 +override TARGET_PROGRAMS+=testdb4 mysqls testdb3 testdb5 endif override INSTALL_FPCPACKAGE=y ifdef REQUIRE_UNITSDIR diff --git a/packages/mysql/examples/Makefile.fpc b/packages/mysql/examples/Makefile.fpc index 2cefd5aeeb..86ec312da1 100644 --- a/packages/mysql/examples/Makefile.fpc +++ b/packages/mysql/examples/Makefile.fpc @@ -3,7 +3,7 @@ # [target] -programs=testdb4 mysqls testdb3 +programs=testdb4 mysqls testdb3 testdb5 [require] packages=mysql diff --git a/packages/mysql/examples/testdb5.pp b/packages/mysql/examples/testdb5.pp new file mode 100644 index 0000000000..535dba18ea --- /dev/null +++ b/packages/mysql/examples/testdb5.pp @@ -0,0 +1,194 @@ +program testdb5; + +{$mode objfpc}{$H+} + +uses + mysql57dyn; + +Const + CHost : string = 'localhost'; + CDataBase : string = 'test'; + CQuery1 : string = 'select * from FPDEV'; + CQuery2 : string = 'select * from FPDEV where ID between ? and ?'; + +var + Database : string; + MySQL : PMYSQL; + i, real_length : integer; + s : string; + Res : PMYSQL_RES; + Field: PMYSQL_FIELD; + Row : MYSQL_ROW; + + Stmt : PMYSQL_STMT; + BindParams : array[1..2] of MYSQL_BIND; + param1: longint = 10; + param2: longint = 20; + BindRes : array of MYSQL_BIND; + BindFields : array of record + buffer: record case byte of + 0: (AsLong: longint); + 1: (AsLongLong: int64); + 2: (AsDouble: double); + 3: (AsBytes: array[0..10] of byte); + end; + length: dword; + is_null: my_bool; + error: my_bool; + end; + +procedure MySQLError(const Msg: string); +begin + Writeln (stderr, Msg, ' (', mysql_errno(MySQL), ': ', mysql_error(MySQL), ')'); + halt(1); +end; + +procedure MySQLStmtError(const Msg: string); +begin + Writeln (stderr, Msg, ' (', mysql_stmt_errno(Stmt), ': ', mysql_stmt_error(Stmt), ')'); + halt(1); +end; + +begin + if ParamCount=1 then + Database := ParamStr(1) + else + Database := CDatabase; + + // load client library + InitialiseMySQL; + + Write ('Connecting to ', CHost, ' MySQL...'); + MySQL := mysql_init(MySQL); + if mysql_real_connect(MySQL, PAnsiChar(CHost), 'root', 'root', Nil, 0, Nil, CLIENT_MULTI_RESULTS) = nil then + MySQLError('Couldn''t connect to MySQL.'); + Writeln ('Done.'); + + Writeln ('Connection data:'); + writeln ('Host info : ',mysql_get_host_info(MySQL)); + writeln ('Server info : ',mysql_stat(MySQL)); + writeln ('Client info : ',mysql_get_client_info); + + Writeln ('Selecting Database ',DataBase,'...'); + if mysql_select_db(MySQL, PAnsiChar(DataBase)) <> 0 then + MySQLError('Couldn''t select database '+Database); + + (*** Example using traditional API: ***) + writeln ('Executing query : ',CQuery1,' ...'); + if mysql_query(MySQL, PAnsiChar(CQuery1)) <> 0 then + MySQLError('Query failed'); + + Res := mysql_store_result(MySQL); + if Res=Nil then + MySQLError('Query returned nil result.'); + Writeln ('Number of records returned : ',mysql_num_rows (Res)); + Writeln ('Number of fields per record : ',mysql_num_fields(Res)); + + Row := mysql_fetch_row(Res); + while (Row <> nil) do + begin + Write ('('); + for i:=0 to mysql_num_fields(Res)-1 do + begin + if i > 0 then Write(', '); + Field := mysql_fetch_field_direct(Res, i); + Write (Field^.name, ': ', Row[0]); + end; + Writeln(')'); + Row := mysql_fetch_row(Res); + end; + Writeln ('Freeing memory occupied by result set...'); + mysql_free_result (Res); + + (*** Example using prepared statement API: ***) + writeln ('Preparing query : ',CQuery2,' ...'); + Stmt := mysql_stmt_init(MySQL); + if mysql_stmt_prepare(Stmt, PAnsiChar(CQuery2), length(CQuery2)) <> 0 then + MySQLStmtError('Query preparation failed'); + Writeln ('Query has ', mysql_stmt_param_count(Stmt), ' parameters'); + + // binding input parameters + BindParams[1].buffer_type := MYSQL_TYPE_LONG; + BindParams[1].buffer := @param1; + BindParams[1].buffer_length := 0; // for integer type no need to specify + BindParams[1].length := nil; + BindParams[1].is_null := nil; + + BindParams[2].buffer_type := MYSQL_TYPE_LONG; + BindParams[2].buffer := @param2; + + if mysql_stmt_bind_param(Stmt, @BindParams[1]) <> 0 then + MySQLStmtError('Parameters binding failed'); + + writeln ('Executing query : ',CQuery2,' ...'); + if mysql_stmt_execute(Stmt) <> 0 then + MySQLStmtError('Query execution failed'); + + //mysql_stmt_store_result(Stmt); // optional; but may be required when using later "mysql_stmt_num_rows()" + Writeln ('Number of records returned : ',mysql_stmt_num_rows (Stmt)); + Writeln ('Number of fields per record : ',mysql_stmt_field_count(Stmt)); + + // prepare structures for output field binding + SetLength(BindRes , mysql_stmt_field_count(Stmt)); + SetLength(BindFields, mysql_stmt_field_count(Stmt)); + + Res := mysql_stmt_result_metadata(Stmt); // Fetch result set meta information + Field := mysql_fetch_fields(Res); + + // for each field in result set prepare result buffer + for i:=0 to mysql_stmt_field_count(Stmt)-1 do + begin + BindRes[i].buffer_type := Field^.ftype; + BindRes[i].buffer_length := 9; + BindRes[i].buffer := @BindFields[i].buffer; + BindRes[i].length := @BindFields[i].length; + BindRes[i].is_null := @BindFields[i].is_null; + BindRes[i].error := @BindFields[i].error; + Inc(Field); + end; + + if mysql_stmt_bind_result(Stmt, @BindRes[0]) <> 0 then + MySQLStmtError('Bind result failed'); + + // if output buffer is smaller than length of character data MYSQL_DATA_TRUNCATED is returned + // and "error" member of MYSQL_BIND structure is set + while mysql_stmt_fetch(Stmt) in [0, MYSQL_DATA_TRUNCATED] do + begin + for i:=0 to mysql_stmt_field_count(Stmt)-1 do + begin + if i > 0 then Write(', '); + // check real length and set up space in result buffer + real_length := BindFields[i].length; + if BindRes[i].buffer_type in [MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING] then + if real_length > 9 then + begin + // prepare buffer with required length + SetLength(s, real_length); + BindRes[i].buffer := @s[1]; + BindRes[i].buffer_length := real_length; + // fetch again + mysql_stmt_fetch_column(Stmt, @BindRes[i], i, 0); + Write(s); + end + else + begin + SetString(s, BindRes[i].buffer, real_length); + Write(s); + end + else + Write(BindFields[i].buffer.AsLong); + end; + Writeln; + end; + + mysql_free_result(Res); // Free the prepared result metadata + mysql_stmt_free_result(Stmt); + mysql_stmt_close(Stmt); + + Writeln ('Closing connection with MySQL.'); + mysql_close(MySQL); + // unload client library + ReleaseMySQL; + halt(0); +end. +