News
Photos
Articles
Components
Applications
Kleinkunst

PHP - Execute MySQL queries with less source code

Als je in je PHP scripts veel gebruik maakt van een MySQL database, dan moet je heel vaak de zelfde stukjes source code herhalen om een connectie te maken, een query uit te voeren, te controleren of deze resultaat geeft, ... Je kan echter enkele eenvoudige functies maken waarin je alle controles implementeert. Als je gebruikt maakt van onderstaande functies zal je uiteindelijke source code heel wat leesbaarder worden en bovendien ben je zeker dat je overal de nodige controles uitvoert.

Connectie naar een MySQL database

Connecteren

Met de scConnectToDB functie kan je snel een connectie maken naar je database. De variabelen $strDatabaseName, $strDBHost, $strDBUserName, $strDBPassword moet je wel ergens globaal declareren. Alle mogelijke fouten worden opgevangen. Gaat er iets mis, dan zal deze functie False teruggeven.

function scConnectToDB() {
  global $Database, $strDatabaseName, $strDBHost, $strDBUserName, $strDBPassword;
  $Database= mysql_connect($strDBHost, $strDBUserName, $strDBPassword);

  if (!$Database) {
    echo mysql_error();
    return(False);
  }
  else {
    if (!mysql_select_db($strDatabaseName)) {
      echo mysql_error();
      return(False);
    }
    else {
      return(True);
    }
  }
}

Disconnecteren

De scDisconnectFromDB functie sluit de connectie terug af en onderdrukt alle fouten.

function scDisconnectFromDB() {
  return @mysql_close();
}

SELECT queries uitvoeren

De scGetQueryResult functie kan je op 2 manieren gebruiken. Om een SELECT query uit te voeren die meerdere records met eventueel meerdere rijen terugeeft als array, of een SELECT query die slechts 1 record met 1 veld teruggeeft. Ook hier zijn de nodige controles ingebouwd.

function scGetQueryResult($strSQL, $varResultNotFound, $strResultFieldName = '') {
  $qryResult = mysql_query($strSQL);
  if (!$qryResult) {
    return($varResultNotFound);
  }
  else {
    if (mysql_num_rows($qryResult) > 0) {
      // Return array with all fields
      if ($strResultFieldName == '') {
        $qryRows = array();
        while ($qryRow = mysql_fetch_assoc($qryResult)) {
          $qryRows[] = $qryRow;
       }
        return($qryRows);
      }
      else {
        // Return only the given field
        $qryRow = mysql_fetch_assoc($qryResult);
        return($qryRow[$strResultFieldName]);
    }
    }
    else {
      // No result, return value which was given as parameter
      return($varResultNotFound);
    }
  }
}

Queries uitvoeren met bovenstaande functies

In onderstaand voorbeeld wordt eerst een connectie gemaakt met de scConnectToDB functie. Als dit lukt gaan we verder. Er wordt een SELECT query uitgevoerd en alle rijen worden doorlopen. Daarna voeren we een SELECT query uit die slechts 1 resultaat teruggeeft en dit kunnen we rechtstreeks in een variabele bewaren. Uiteindelijk sluiten we de connectie met de scDisconnectFromDB functie.

if (scConnectToDB()) {
  // Meerdere records met meerdere velden ophalen
  $strSQL = "SELECT * FROM MijnTabel";
  $arrItems = scGetQueryResult($strSQL,'');
  if ($arrItems <> '') {
    foreach ($arrItems as $arrItem) {
      // ...
  }		
 }

  // 1 veld in 1 record ophalen
  $strSQL = "SELECT Count(*) AS Aantal FROM MijnTabel";
  $intCount = scGetQueryResult($strSQL,'Aantal',0);

  scDisconnectFromDB();
}