Function DE Version 5.00

@MySQLQuery

SQL

Syntax

@MySQLQuery(MySQLHandle;QueryStr);
@MySQLQuery(MySQLHandle;QueryStr;MySQLResultHandle);
@MySQLQuery(MySQLHandle;QueryStr;MySQLResultHandle;AutoIncrementIDRet);

Beschreibung

Führt einen MySQL-Query aus.
Wenn die Anfrage ein Ergebnis liefert kann dieses im VSPECMYSQLRES MySQLResultHandle gespeichert werden.
Wenn die Anfrage ein INSERT Statement enthält und dieses auf eine AUTOINCREMENT ID Spalte einwirkt, wird die generierte ID in AutoIncrementIDRet zurückgegeben.

Der VSPECMYSQL MySQLHandle wird von @MySQLInit geliefert.

Return:
Im Erfolgsfall TRUE andernfalls @Error;

Beispiel: @MySQLQuery(MySQLHandle;QueryStr;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);}
      
      /* 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
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.