Function DE Version 5.00

@MySQLGetNumFields

SQL

Syntax

@MySQLGetNumFields(MySQLResultHandle);
@MySQLGetNumFields(MySQLPreparedStatementHandle);

Beschreibung

Gibt die Anzahl der Felder (Columns) eines gespeicherten Ergebnises einer @MySQLQuery oder @MySQLExecutePreparedStatement Anfrage zurück.
Return:
Im Erfolgsfall die Anzahl sonst @Error;

Beispiel: @MySQLGetNumFields(MySQLResultHandle);

/* Beispiel: Einfache MySQL-Abfrage aus der Engine.
Das Skript stellt eine Verbindung zu einer MySQL-Datenbank her,
liest einen Datensatz aus der Tabelle testdb.amount,
übernimmt die Ergebniswerte in Variablen und gibt diese im Log aus. */

/* MySQL-Handle initialisieren. */
MySQLh:=@MySQLInit;

/* Fehlerstatus vorbelegen: 1 bedeutet Fehler bzw. noch keine erfolgreiche Verbindung. */
MySQLError:=1;

/* Prüfen, ob die Initialisierung des MySQL-Handles erfolgreich war. */
IF(@IsError(MySQLh)){
   @LogReport(MySQLh;3);
}ELSE{
   /* MySQL-Optionen setzen bzw. initialisieren. */
   @MySQLOptions(MySQLh);
   
   /* Verbindungsdaten für den MySQL-Server festlegen. */
   MySQLUser:="MySQLConnector";
   MySQLPassword:="ConnectorPassword";
   MySQLDefaultDatabase:="testdb";
   MySQLHost:="172.16.1.215";
   
   /* Verbindung zur MySQL-Datenbank herstellen. */
   Ret:=@MySQLConnect(MySQLh;MySQLHost;MySQLUser;MySQLPassword;MySQLDefaultDatabase);
   
   /* Wenn die Verbindung fehlschlägt, Fehler protokollieren. */
   IF(@IsError(Ret)){
      @LogReport(Ret);
   }ELSE{
      /* Verbindung war erfolgreich; Fehlerstatus zurücksetzen. */
      MySQLError:=0;}
   
   /* Die Abfrage nur ausführen, wenn die Verbindung erfolgreich hergestellt wurde. */
   IF(!MySQLError){
      /* Datensatz mit einem bestimmten Namen in der MySQL-Tabelle anlegen. */
      InsertQueryStr:="INSERT INTO testdb.amount (Name,Amount,UID,ModTime) VALUES (\"Test User2\",123.45,\"1234567890ABCDEFABCD123456789000\",NOW());";
      Ret:=@MySQLQuery(MySQLh;InsertQueryStr);
      /* INSERT OK? Wenn ja, sonst Error ins Log */
      IF(@IsError(Ret)){
         @LogReport(Ret;3);}
      
      /* Wie viele Zeilen wurden verändert? */
      AffectedRows:=@MySQLGetAffectedRows(MySQLh);
      @LogReport("AffectedRows INSERT :"+@Text(AffectedRows);3);
      
      /* Datensatz mit einem bestimmten Namen aus der MySQL-Tabelle lesen. */
      QueryStr:="SELECT ID,Name,Amount,UID FROM testdb.amount WHERE Name=\"Test User2\";";
      
      /* Query ausführen und das Ergebnis-Handle in MySQLResH zurückgeben. */
      Ret:=@MySQLQuery(MySQLh;QueryStr;MySQLResH);
      IF(@IsError(Ret)){
         @LogReport(Ret;3);}
      
      /* Die Anzahl der im gespeicherten Ergebnis enthaltenen Felder ermitteln */
      NumberOfFields:=@MySQLGetNumFields(MySQLResH);
      @LogReport("Number of Fields:"+@Text(NumberOfFields);3);
      
      /* Anzahl der von der Abfrage zurückgegebenen Zeilen ermitteln. */
      NumRows:=@MySQLGetNumRows(MySQLResH);
      @LogReport("NumRows found:"+@Text(NumRows);3);
      
      /* Genau einen erwarteten Datensatz auslesen. */
      IF(NumRows=1){
         /* Erste Ergebniszeile lesen und die Spaltenwerte in Variablen übernehmen. */
         Ret:=@MySQLFetchRow(MySQLResH;1;ThisQueryID;ThisQueryName;ThisQueryAmount;ThisQueryUID);
         IF(@IsError(Ret)){
            @LogReport(Ret;3);}
      }ELSE{
         /* Wenn kein eindeutiger Datensatz gefunden wurde, Standardwerte setzen. */
         ThisQueryID:=-1;
         ThisQueryAmount:=0;
         ThisQueryName:=ThisQueryUID:="";
      }
      
      /* Datensatz mit einem bestimmten Namen weider aus der MySQL-Tabelle entfernen. */
      DeleteQueryStr:="DELETE FROM testdb.amount WHERE Name=\"Test User2\";";
      Ret:=@MySQLQuery(MySQLh;DeleteQueryStr);
      /* INSERT OK? Wenn ja, sonst Error ins Log */
      IF(@IsError(Ret)){
         @LogReport(Ret;3);}
      
      /* Wie viele Zeilen wurden verändert? */
      AffectedRows:=@MySQLGetAffectedRows(MySQLh);
      @LogReport("AffectedRows DELETE :"+@Text(AffectedRows);3);

      /* Ergebnis-Handle freigeben. */
      MySQLResH:=@MySQLFreeResult(MySQLResH);
      
      /* Die gelesenen bzw. gesetzten Ergebniswerte ausgeben. */
      @LogReport("ThisQueryID :"+@Text(ThisQueryID);3);
      @LogReport("ThisQueryName :"+ThisQueryName;3);
      @LogReport("ThisQueryAmount:"+@Text(ThisQueryAmount);3);
      @LogReport("ThisQueryUID :"+ThisQueryUID;3);
   }
   
   /* MySQL-Verbindung schließen. */
   MySQLh:=@MySQLClose(MySQLh);
}

/* MySQL-Thread-Kontext beenden bzw. aufräumen. */
@MySQLThreadEnd;

MySQL DB für dieses Beispiel:
CREATE DATABASE testdb
CHARACTER SET latin1 COLLATE latin1_german1_ci;

CREATE TABLE testdb.amount (
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(30),
`Amount` FLOAT,
`UID` VARCHAR(32),
`ModTime` DATETIME,
PRIMARY KEY(`ID`),
INDEX `Name` USING BTREE (`Name`),
INDEX `UID` USING BTREE (`UID`)
)
ENGINE = MYISAM
CHARACTER SET latin1 COLLATE latin1_german1_ci;

Ausgabe im APILOG für dieses Beispiel:
AffectedRows INSERT :1
NumRows found:1
Number of Fields:4
AffectedRows DELETE :1
ThisQueryID :10
ThisQueryName :Test User2
ThisQueryAmount:123.45
ThisQueryUID :1234567890ABCDEFABCD123456789000

Eine MySQL-Verbindung wird etabliert und ein Query abgesetzt, anschließend wird das Ergebnis im APILOG ausgegeben.