From ba24f9e5addefd01827c77573a0e26f250277ee4 Mon Sep 17 00:00:00 2001 From: Florian Pesth Date: Tue, 26 Dec 2023 20:17:45 +0100 Subject: [PATCH] Correct static check for pdo statements --- html/SQL.php | 140 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 102 insertions(+), 38 deletions(-) diff --git a/html/SQL.php b/html/SQL.php index eb4d0bd..a7dfaf0 100644 --- a/html/SQL.php +++ b/html/SQL.php @@ -24,7 +24,11 @@ function CreateHelfer($pdo, $HelferName, $HelferEmail, $HelferHandy, $HelferPass static $sql = "INSERT INTO Helfer(Name,Email,Handy,Status,BildFile,DoReport,Passwort,HelferLevel)". " VALUES (:name,:email,:handy,:status,:bildfile,:doreport,:passwort,:helferlevel)"; static $stmt = false; - if(!$stmt) $stmt = $pdo->prepare($sql); + static $stmt_prepared = false; + if(!$stmt_prepared) { + $stmt = $pdo->prepare($sql); + $stmts_prepared = true; + } $db_erg = $stmt->execute([ "name" => $HelferName, "email" => $HelferEmail, @@ -46,7 +50,11 @@ function HelferIstVorhanden($pdo, $Email) { static $sql = "SELECT count(HelferID) AS Anzahl FROM Helfer WHERE Email = :email"; static $stmt = false; - if(!$stmt) $stmt = $pdo->prepare($sql); + static $stmt_prepared = false; + if(!$stmt_prepared) { + $stmt = $pdo->prepare($sql); + $stmt_prepared = true; + } $stmt->execute(["email" => $Email]); // TODO Test, that this still works $zeile = $stmt->fetchAll(); @@ -60,7 +68,11 @@ function HelferLogin($pdo, $HelferEmail, $HelferPasswort, $HelferStatus) // Helfer Suchen static $sql = "SELECT HelferID,Admin,Name,Passwort,HelferLevel FROM Helfer WHERE Email=:email"; static $stmt = false; - if(!$stmt) $stmt = $pdo->prepare($sql); + static $stmt_prepared = false; + if(!$stmt_prepared) { + $stmt = $pdo->prepare($sql); + $stmt_prepared = true; + } $db_erg = $stmt->execute(["email" => $HelferEmail]); if ($stmt->errorCode() != 1) { echo "Login ungueltige Abfrage"; @@ -92,7 +104,11 @@ function HelferListe($pdo) static $sql = "SELECT HelferID,Name FROM Helfer"; static $stmt = false; - if(!$stmt) $stmt = $pdo->prepare($sql); + static $stmt_prepared = false; + if(!$stmt_prepared) { + $stmt = $pdo->prepare($sql); + $stmt_prepared = true; + } $db_erg = $stmt->execute(); if ($stmt->errorCode() != 1) { echo "Helferliste ungueltige Abfrage"; @@ -109,7 +125,11 @@ function Helferdaten($pdo, $HelferID) static $sql = "SELECT * FROM Helfer Where HelferID = :helferid"; static $stmt = false; if(!$stmt) $stmt = $pdo->prepare($sql); - $db_erg = $stmt->execute(["helferid" => $HelferID]); + static $stmt_prepared = false; + $db_erg stmt_prepared { + $stmt->execute(["helferid" => $HelferID]); + $stmt_prepared = true; + } if ($stmt->errorCode() != 1) { echo "Helferdaten ungueltige Abfrage
\n"; @@ -235,8 +255,10 @@ function AlleSchichtenCount($db_link, $HelferLevel = 1) //$sql = "select SUM(Soll) As Anzahl from SchichtUebersicht where HelferLevel=$HelferLevel"; static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select Sum(Soll) as Anzahl, HelferLevel from SchichtUebersicht,Dienst Where SchichtUebersicht.DienstID=Dienst.DienstID and HelferLevel=:helferlevel"); + $stmt_prepared = true; } @@ -255,10 +277,11 @@ function AlleSchichtenCount($db_link, $HelferLevel = 1) function AlleBelegteSchichtenCount($db_link, $HelferLevel = 1) { - static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select Count(HelferID) As Anzahl from EinzelSchicht,Schicht,Dienst Where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID and HelferLevel=:helferlevel"); + $stmt_prepared = true; } @@ -317,11 +340,12 @@ function AlleSchichtenEinesHelfers($pdo, $HelferID) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=:helferid order by Von"); + $stmt_prepared = true; } - $db_erg = $stmt->execute(["helferid" => $HelferID]); if ($stmt->errorCode() != 1){ @@ -334,11 +358,18 @@ function AlleSchichtenEinesHelfers($pdo, $HelferID) return $db_erg; } +// FIXME function HelferLoeschen($db_link, $HelferID, $AdminID) { $HelferID = mysqli_real_escape_string($db_link, $HelferID); + static $stmt = false; + static $stmt_prepared = false; + if(!$stmt_prepared) { + $stmt = $pdo->prepare("Delete from Helfer where HelferID='$HelferID'";); + $stmt_prepared = true; + } $db_erg = Helferdaten($db_link, $HelferID); while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) { @@ -374,13 +405,16 @@ function SchichtIdArrayEinesHelfers($db_link, $HelferID) // Array, um Zeilen mit von mir belegten Schichten in der Schichtuebersicht einfaerben zu koennenn static $stmt = false; - if(!$stmt) { - $stmt = $pdo->prepare("SELECT SchichtID FROM EinzelSchicht WHERE HelferID = $HelferID"); + static $stmt_prepared = false; + if(!$stmt_prepared) { + $stmt = $pdo->prepare("SELECT SchichtID FROM EinzelSchicht WHERE HelferID = :id"); + $stmt_prepared = true; } //print_r($sql); - $db_erg = mysqli_query($db_link, $sql); + $db_erg = $stmt->execute(["id" => $HelferID]); + $schichtIDs = array(); - while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_NUM)) { + while ($zeile = $stmt->fetch()) { $schichtIDs[] = $zeile[0]; } return($schichtIDs); @@ -391,8 +425,10 @@ function AlleSchichtenEinesHelfersVonJetzt($db_link, $HelferID) // TODO: fix GETDATE() array to string conversion static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=:id and Bis>:bis order by Von"); + $stmt_prepared = true; } //$sql = "select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." and Bis>'2023-05-20' order by Von"; @@ -417,8 +453,10 @@ function SchichtenSummeEinesHelfers($db_link, $HelferID) //$sql = "select count Schicht.Dauer as Anzahl FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." order by Von"; static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select count(*) as Anzahl, SUM(TIME_TO_SEC(Schicht.Dauer)) as Dauer FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=:helferid"); + $stmt_prepared = true; } //echo $sql; $db_erg = $stmt->execute(["helferid" => $HelferID]); @@ -444,7 +482,8 @@ function LogSchichtEingabe($db_link, $HelferID, $SchichtId, $EinzelSchichtId, $A $AdminID = mysqli_real_escape_string($db_link, $AdminID); static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("SELECT Schicht.Von, Schicht.Bis, Dienst.Was, Helfer.Name FROM EinzelSchicht JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID @@ -453,6 +492,7 @@ function LogSchichtEingabe($db_link, $HelferID, $SchichtId, $EinzelSchichtId, $A WHERE EinzelSchicht.HelferID = $HelferID AND ( Schicht.SchichtID = $SchichtId OR EinzelSchicht.EinzelSchichtID = $EinzelSchichtId) "); + $stmt_prepared = true; } //error_log(date('Y-m-d H:i') . " " . $sql ."\n",3,LOGFILE); $db_erg = mysqli_query($db_link, $sql); @@ -481,8 +521,8 @@ function LogSchichtEingabe($db_link, $HelferID, $SchichtId, $EinzelSchichtId, $A function HelferSchichtZuweisen($pdo, $HelferID, $SchichtId, $AdminID = 0) { // Abfrage, ob bereits eine Einzelschicht in der selben Schicht vom Helfer existiert - static $stmts_prepared = false; static $stmts = false; + static $stmts_prepared = false; if(!$stmts_prepared) { $stmts['einzelschicht_exists'] = $pdo->prepare("SELECT EinzelSchichtID from EinzelSchicht WHERE SchichtID=:schichtid and HelferID=:helferid"); $stmts['new_einzelschicht'] = $pdo->prepare("INSERT INTO EinzelSchicht(SchichtID,HelferID) VALUES (:schichtid,:helferid)"); @@ -523,8 +563,10 @@ function HelferVonSchichtLoeschen($pdo, $HelferID, $EinzelSchichtID, $AdminID = // Lösche Einzelschicht static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("Delete From EinzelSchicht Where EinzelSchichtID = :id"); + $stmt_prepared = true; } //echo $sql; @@ -540,8 +582,10 @@ function HelferVonSchichtLoeschen_SchichtID($pdo, $HelferID, $SchichtID, $AdminI // Lösche Einzelschicht static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("Delete From EinzelSchicht Where SchichtID = :schichtid and HelferID = :helferid limit 1;"); + $stmt_prepared = true; } //echo $sql; $db_erg = $stmt->execute([ @@ -552,15 +596,13 @@ function HelferVonSchichtLoeschen_SchichtID($pdo, $HelferID, $SchichtID, $AdminI return $db_erg; } - - - - function DetailSchicht($pdo, $InfoSchichtID) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select Was,Wo,Info,Name,Handy,Email,DATE_FORMAT(Dauer,'%H:%i') AS Dauer FROM Dienst,Schicht,Helfer where Dienst.DienstID=Schicht.DienstID AND Helfer.HelferID=Dienst.Leiter And SchichtID=:id"); + $stmt_prepared = true; } //echo $sql; @@ -580,8 +622,10 @@ function DetailSchicht($pdo, $InfoSchichtID) function BeteiligteHelfer($pdo, $InfoSchichtID) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select Helfer.HelferID,Name,Handy FROM EinzelSchicht,Helfer where EinzelSchicht.HelferID=Helfer.HelferID And SchichtID=:id"); + $stmt_prepared = true; } $db_erg = $stmt->execute(["id" => $InfoSchichtID]); @@ -598,8 +642,10 @@ function BeteiligteHelfer($pdo, $InfoSchichtID) function GetDienste($db_link) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("SELECT DienstID, Was, Wo, Info, Leiter, ElternDienstID, HelferLevel FROM Dienst order By Was"); + $stmt_prepared = true; } $db_erg = mysqli_query($db_link, $sql); if ($stmt->errorCode() != 1){ @@ -612,8 +658,10 @@ function GetDienste($db_link) function GetDiensteChilds($pdo, $DienstID) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("SELECT DienstID, Was, Wo, Info, Leiter FROM Dienst where ElternDienstID=:id order by Was"); + $stmt_prepared = true; } $db_erg = $stmt->execute(["id" => $DienstID]); @@ -629,11 +677,12 @@ function GetDiensteChilds($pdo, $DienstID) function ChangeDienst($pdo, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("UPDATE Dienst SET Was=:was, Wo=:wo, Info=:info, Leiter=:leiter, ElternDienstID=:elterndienstid where DienstID=:dienstid"); + $stmt_prepared = true; } - $db_erg = $stmt->execute([ "was" => $Was, "wo" => $Wo, @@ -653,8 +702,10 @@ function ChangeDienst($pdo, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $Helf function NewDienst($pdo, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("INSERT INTO Dienst (Was, Wo, Info, Leiter, ElternDienstID, HelferLevel) values (:was,:wo,:info,:leiter,:elterndienstid,:helferlevel)"); + $stmt_prepared = true; } $db_erg = $stmt->execute([ @@ -715,11 +766,12 @@ function DeleteDienst($db_link, $DienstID, $Rekursiv) function GetSchichtenEinesDienstes($db_link, $DienstID) { - //$sql = "SELECT SchichtID,Von,Bis,Soll,DATE_FORMAT(Von,'%a %H:%i') AS TagVon FROM Schicht where DienstID=".$DienstID; static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("SELECT SchichtID,Von,Bis,Soll,DATE_FORMAT(Von,'%a %H:%i') AS TagVon, DATE_FORMAT(Von,'%H:%i') AS ZeitVon, DATE_FORMAT(Bis,'%H:%i') AS ZeitBis FROM Schicht where DienstID=:id"); + $stmt_prepared = true; } $db_erg = $stmt->execute(['id' => $DienstID]); if ($stmt->errorCode() != 1){ @@ -733,8 +785,10 @@ function GetSchichtenEinesDienstes($db_link, $DienstID) function ChangeSchicht($db_link, $SchichtID, $Von, $Bis, $Soll) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("UPDATE Schicht SET Von=:von, Bis=:bis, Soll=:soll where SchichtID=:id"); + $stmt_prepared = true; } $db_erg = $stmt->execute([ @@ -766,8 +820,10 @@ function NewSchicht($db_link, $DienstID, $Von, $Bis, $Soll) } */ static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("INSERT INTO Schicht (DienstID, Von, Bis, Soll) values (:id,:von,:bis,:soll)"); + $stmt_prepared = true; } $db_erg = $stmt->execute([ @@ -828,8 +884,10 @@ function DeleteSchicht($pdo, $SchichtID, $Rekursiv) function AlleHelferSchichtenUebersicht($pdo) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select Helfer.HelferID as AliasHelferID,Name,Email,Handy,Was,SUM(Dauer)/10000 as Dauer from Helfer,EinzelSchicht INNER JOIN Schicht INNER JOIN Dienst where Helfer.HelferID=EinzelSchicht.HelferID and EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID group by Helfer.HelferID,Was"); + $stmt_prepared = true; } $db_erg = $stmt->execute(); @@ -845,7 +903,11 @@ function DatenbankAufDeutsch($pdo) { static $sql = "SET lc_time_names = 'de_DE'"; static $stmt = false; - if(!$stmt) $stmt = $pdo->prepare($sql); + static $stmt_prepared = false; + if(!$stmt_prepared) { + $stmt = $pdo->prepare($sql); + $stmt_prepared = true; + } $db_erg = $stmt->execute(); if ($stmt->errorCode() != 1){ @@ -858,8 +920,10 @@ function DatenbankAufDeutsch($pdo) function HelferLevel($db_link) { static $stmt = false; - if(!$stmt) { + static $stmt_prepared = false; + if(!$stmt_prepared) { $stmt = $pdo->prepare("select HelferLevel,HelferLevelBeschreibung from HelferLevel"); + $stmt_prepared = true; } $db_erg = $stmt->execute(); if($stmt->errorCode() != 1){