SQL/PHP was ist richtiger?

Hallo,

ich habe eine PHP Datei an Shopware „angedockt“ welche 50% mit der API arbeitet und 50% direkt auf die Datenbank zugreift. Vll kennt sich jemand mit php aus. Speziell hier in dem Fall, ob die $pdo ausserhalb von Foreach stehen soll/kann oder ob es innerhalb Foreach soll/kann, oder ob es egal ist.

Schematisches Beispiel:

$allorders = $client->get("orders/",$params);
$allorders = json_decode($allorders);

foreach ($result->data as $singleorder){

  $pdo = new PDO('mysql:host=127.0.0.1;dbname=' . $dbconfig["db"]["dbname"], $dbconfig["db"]["username"], $dbconfig["db"]["password"]);
  $connection = $pdo->prepare("SQL SELECT UPDATE IRGENDWAS");
  $connection->execute(); 
  ...

}

oder so?

$allorders = $client->get("orders/",$params);
$allorders = json_decode($allorders);

$pdo = new PDO('mysql:host=127.0.0.1;dbname=' . $dbconfig["db"]["dbname"], $dbconfig["db"]["username"], $dbconfig["db"]["password"]);

foreach ($result->data as $singleorder){

  $connection = $pdo->prepare("SQL SELECT UPDATE IRGENDWAS");
  $connection->execute(); 
  ...

}

Meine Befürchtung für das erste Beispiel: Die Performance ist schlechter weil für jeden Request ein new PDO erstellt wird.

Meine Befürchtung für das zweite Beispiel: Es könnten ggf Daten veloren gehen wenn nicht jeder Request auf einem eigene abgeschlossenen new PDO zurückgreifen kann?

Danke und Gruss.

IMHO musst du nur einmal den PDO initialisieren (also außerhalb)

1 Like

Solange das $pdo in den … der foreach nicht überschrieben wird, kann es außerhalb der Schleife platziert werden.

Wobei ich es sogar in eine eigene Methode packen würde. Dann könntest du es dir mittels $this->getDP() sogar in mehreren methoden holen - sofern benötigt.