Rolf b: PHP - Umstellung auf mysqli

Beitrag lesen

Hallo Jan,

wenn Du unbedingt auf Errorhandling verzichten willst, geht's auch so:

$sqlStatement = "SELECT MAX(id) AS maxActiveNewsId FROM news";
$row = $mysqli->query($sqlStatement)->fetch_array(MYSQL_ASSOC)
return $row['maxActiveNewsId'];

Es gibt aber Verbesserungspotential.

  • Verwende fetch_assoc - fetch_array(MYSQL_ASSOC) ist ein umständlicherer Weg zum gleichen Ziel
  • Schreibe Dir eine Klasse, die die SQL Zugriffe technisch bündelt. Falls mysqli irgendwann auch mal deprecated sein sollte, brauchst Du nur dort umzustellen. Diese Klasse kennt dann Methoden wie "GetSingleValue", "GetSingleRow", "EnumerateResult". EnumerateResult bietet Dir die Change, mit Generatoren zu spielen :). Inserts und Updates sind etwas aufwändiger...
  • In der technischen Klasse kümmerst Du Dich um Freigabe von Ressourcen (z.B. free_result()) und korrektes Fehlerhandling. Das stumpfe "false", dass Du von mysqli->query() zurückbekommst, kannst Du dann gleich um mysqli->error anreichern.
  • Was man dann noch machen kann: Schreibe Dir Klassen, die die SQL Zugriffe nach fachlicher Domäne bündeln (Repositories) und die auf die technische Klasse zurückgreifen. D.h. du hast dann eine Klasse "NewsRepository" mit einer Methode "GetMaxActiveNewsId()". Dann hast Du (a) das SQL nicht durch die ganze Anwendung verbröselt und (b) kannst Du ein Fake-Repository verwenden wenn Du Unit-Tests ohne Datenbank machst.

Rolf