Bladeren bron

* Added example for parameter binding from Laco

git-svn-id: trunk@31310 -
michael 10 jaren geleden
bovenliggende
commit
7f1b21e561
4 gewijzigde bestanden met toevoegingen van 276 en 81 verwijderingen
  1. 1 0
      .gitattributes
  2. 80 80
      packages/mysql/examples/Makefile
  3. 1 1
      packages/mysql/examples/Makefile.fpc
  4. 194 0
      packages/mysql/examples/testdb5.pp

+ 1 - 0
.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

+ 80 - 80
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

+ 1 - 1
packages/mysql/examples/Makefile.fpc

@@ -3,7 +3,7 @@
 #
 
 [target]
-programs=testdb4 mysqls testdb3
+programs=testdb4 mysqls testdb3 testdb5
 
 [require]
 packages=mysql

+ 194 - 0
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.
+