Za dużo zapytań w funkcji - jak zapobiec

0

Witam. Chcę zrealizować funkcjonalność na stronie, która za jednym kliknięciem usuwała by produkty z dwóch tabel, dodawała produkty także do dwóch, wysyłała maila oraz korygowała ilość. W jaki sposób można to najoptymalniej wykonać aby nie tworzyć 4 zapytań typu

		$stmt=$this->db->prepare('INSERT INTO kupione (produkt nick,time,data) 
									VALUES (:produkt,:nick,:time,:data)');
			$stmt->bindParam(':produkt',$row['produkt'],PDO::PARAM_STR);
			$stmt->bindParam(':nick',$_SESSION['logowanie'],PDO::PARAM_STR);
			$stmt->bindParam(':time',$time);
			$stmt->bindParam(':data',$data;
			$stmt->execute();
0

Zapytanie trzeba siłą rzeczy i tak wysłać - pisania wprost możesz uniknąć wykorzystując jakiś sensowny ORM typu Doctrine.

0

Nie optymalizuj, jeżeli nie musisz. Takie coś zapewne niewiele Ci da, jednocześnie pewnie masz wiele miejsc o poważniejszej skali zamulania. Niektórzy to by najchętniej całe odświeżenie strony polegające na realizacji kilku procesów obsłużyli w jednym zapytaniu, ale tak się nie da ;)

Swoją drogą - zmniejszenie ilości zapytań często może powodować wydłużenie czasu realizacji zapytania

0

Dziękuje, za odpowiedzi. Zauważyłem jedną rzecz, składając zapytania w taki sposób, kilka poleceń się nie wykonuje, dajmy na to, klikam przycisk i kod musi (tak jak w pierwszym poście) usunąć daną 'ilość' z kilku wyświetlonych rekordów z bazy, usuwa tylko z jednego, a z pozostałych nie, lecz usuwa wszystkie rekordy z określonej w zapytaniu tabeli(tak jak powinien) ilość, także powinien usuwać z wszystkich rekordów, gdzie jest problem ?

1

Jeżeli mogę dodać coś od siebie to obsługa transakcji:

 

try {  
    $db->beginTransaction();  
  
    $stmt = $db->prepare("UPDATE tabela1 SET kolumna=1");  
    $stmt->execute();  
  
    $stmt = $db->prepare("UPDATE tabela2 SET kolumna=0 WHERE id=:id");  
    $stmt->execute(array(':id'=>$id));  
  
    $stmt = $db->prepare("UPDATE tabela3 SET kolumna=0, kolumna2=1 WHERE id=:id");  
    $stmt->execute(array(':id'=>$id));  

    $db->commit();  
} catch(PDOException $e) {  
    $db->rollBack();  
    throw $e;  
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1