Berkovits
25.10.2007, 13:43:31
Czy mozna w jednym zapytaniu MySQL'a dokonac dwoch operacji: DELETE i INSERT?
Jesli nie (znajac zycie, to pewnie nie mozna), to czy mozna z poziomu PHP wyslac jedno zapytanie skladajace sie z dwoch? Jak to sie robi?
Chodzi mi o cos takiego:
<?php
try
{
$pdo->connect(...)
$ilosc = $pdo -> exec('DELETE ... [jakis znacznik rozdzielajacy] INSERT ... '); ...
}
?>
qqrq
25.10.2007, 13:53:38
Raczej nie można. Spróbuj w jednej komendzie dać 2 zapytanie, każde kończące się średnikiem - myślę, że to pomoże. Np. :
<?php
try
{
$pdo->connect(...)
$ilosc = $pdo -> exec('DELETE ... ; INSERT ... ;'); ...
}
?>
Ale głowy nie dam, od razu mówię.
Berkovits
25.10.2007, 14:37:06
Rzeczywiscie zadzialalo. Korzystam z php 5.2.3, mysql chyba 5.0. Jednak nie wszystko jest OK (Moze cos zle robie). Robilem testy z trzema zapytaniami
Po pierwsze, metoda
$pdo -> exec('
INSERT INTO... ;
DELETE FROM ...;
INSERT INTO ...
');
zwraca ilosc wierszy zmodyfikowanych chyba przez pierwsze zapytanie, mimo iż dalsze też operują na tablicy. Ale tego się można było spodziewać (choć raczej myślałem, że zwróci ilosc podczas ostaniej operacji). Gorsza sprawa jest taka, ze jezeli w trzeciej instrukcji (insert) wstawie dane, ktore przez baze danych musza byc odrzucone (duplicate entry), nie pojawia sie wyjatek (blad), natomiast gdy przestawie to "niedobre" polecenie na poczate, kto wszystko jest ok, czyli rzucany jest wyjatek.
Wobec powyzszego, nalezy wysylac takie sklejone zapytania z rozmyslem.
qqrq, dzieki za pomoc.