Function EN Version 5.00

@MySQLFetchRow

SQL

Syntax

@MySQLFetchRow(MySQLResultHandle;FNAnzahl[;ErgebnisFelder;...]);

Description

Fetches one row from the current position (see @MySQLSeekResult) of a stored result of a @MySQLQuery query.
The VSPECMYSQLRES MySQLResultHandle is provided by @MySQLQuery.
After the current row has been retrieved using this function, the internal row index automatically points to the next row. Therefore, a subsequent call to the function retrieves the data from that next row, and so on.

NOTE:
Currently, only one row at a time is supported. FN FNAnzahl is ignored, but should be 1 in case this is extended in the future.

The number of specified ResultFields variables must match the number of queried columns in the query.
The queried values are returned in the ResultFields variables.

Return:
On success TRUE is returned, otherwise @Error or FALSE;

Example: @MySQLFetchRow(MySQLResultHandle;FNCount[;ResultFields;…]);

/* Example: Simple MySQL query from the Engine.
The script establishes a connection to a MySQL database,
reads one record from the table testdb.amount,
stores the result values in variables, and writes them to the log. */

/* Initialize the MySQL handle. */
MySQLh:=@MySQLInit;

/* Initialize the error status: 1 means error or no successful connection yet. */
MySQLError:=1;

/* Check whether the MySQL handle was initialized successfully. */
IF(@IsError(MySQLh)){
   @LogReport(MySQLh;3);
}ELSE{
   /* Set or initialize MySQL options. */
   @MySQLOptions(MySQLh);
   
   /* Define the connection data for the MySQL server. */
   MySQLUser:="MySQLConnector";
   MySQLPassword:="ConnectorPassword";
   MySQLDefaultDatabase:="testdb";
   MySQLHost:="172.16.1.215";
   
   /* Establish the connection to the MySQL database. */
   Ret:=@MySQLConnect(MySQLh;MySQLHost;MySQLUser;MySQLPassword;MySQLDefaultDatabase);
   
   /* If the connection fails, log the error. */
   IF(@IsError(Ret)){
      @LogReport(Ret);
   }ELSE{
      /* The connection was successful; reset the error status. */
      MySQLError:=0;}
   
   /* Execute the query only if the connection was established successfully. */
   IF(!MySQLError){
      /* Read a record with a specific name from the MySQL table. */
      QueryStr:="SELECT ID,Name,Amount,UID FROM testdb.amount WHERE Name=\"Test User\";";
      
      /* Execute the query and return the result handle in MySQLResH. */
      Ret:=@MySQLQuery(MySQLh;QueryStr;MySQLResH);
      IF(@IsError(Ret)){
         @LogReport(Ret;3);}
      
      /* Determine the number of rows returned by the query. */
      NumRows:=@MySQLGetNumRows(MySQLResH);
      @LogReport("NumRows:"+@Text(NumRows);3);
      
      /* Read exactly one expected record. */
      IF(NumRows=1){
         /* Read the first result row and store the column values in variables. */
         Ret:=@MySQLFetchRow(MySQLResH;1;ThisQueryID;ThisQueryName;ThisQueryAmount;ThisQueryUID);
         IF(@IsError(Ret)){
            @LogReport(Ret;3);}
      }ELSE{
         /* If no unique record was found, set default values. */
         ThisQueryID:=-1;
         ThisQueryAmount:=0;
         ThisQueryName:=ThisQueryUID:="";
      }
      
      /* Free the result handle. */
      MySQLResH:=@MySQLFreeResult(MySQLResH);
      
      /* Output the retrieved or assigned result values. */
      @LogReport("ThisQueryID :"+@Text(ThisQueryID);3);
      @LogReport("ThisQueryName :"+ThisQueryName;3);
      @LogReport("ThisQueryAmount:"+@Text(ThisQueryAmount);3);
      @LogReport("ThisQueryUID :"+ThisQueryUID;3);
   }
   
   /* Close the MySQL connection. */
   MySQLh:=@MySQLClose(MySQLh);
}

/* End or clean up the MySQL thread context. */
@MySQLThreadEnd;

MySQL DB for this example:
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;

INSERT INTO testdb.amount (Name,Amount,UID,ModTime) VALUES ("Test User",123.45,"1234567890ABCDEFABCD1234567890AB",NOW());

Output in the APILOG for this example:
NumRows:1
ThisQueryID :1
ThisQueryName :Test User
ThisQueryAmount:123.45
ThisQueryUID :1234567890ABCDEFABCD1234567890AB

A MySQL connection is established and a query is issued; afterwards, the result is output to the APILOG.

Note : This text was machine-translated and may contain inaccuracies.