Mam jeden niesamowicie ciekawy problem związany z wstawianiem danych do bazy danych poprzez PHP. Sprawa wygląda następująco. Tworzę następujące pytanie:
<?php $stmt = "UPDATE zmienna_sesji SET wartosc_zmiennej = '$strSer' WHERE nazwa_zmiennej = '$nm' AND identyfikator_sesji = $this->native_session_id"; $this->dbhandle->query($stmt); ?>
a następnie wysyłam je do bazy poprzez funkcję query. Problem w tym, że dane wstawiane do bazy nie są danymi które są treścią zapytania. Dokładnie w bazie powinno wylądować coś takiego co potwierdza echo:
Kod:
UPDATE zmienna_sesji SET wartosc_zmiennej = 's:14:"miesiac/1/2007";' WHERE nazwa_zmiennej = 'widok' AND identyfikator_sesji = 578
Ale wcale tak nie jest zamiast liczby będącej rokiem 2007 do bazy trafia coś takiego jak "miesiac/1/". Widać że zmienna zostaje zastąpiona przez "nic".
Nie jest to błąd zapytania gdyż jak widać zapytanie zostaje wyświetlone zaraz przed wstawieniem do bazy i jest jak najbardziej poprawne. Nie mam zielonego pojęcia co się dzieje.
Zastanawiam się jak to możliwe, że wartość zmiennej zostaje zamieniona.
Może ktoś ma jakieś pomysły, błąd dotyczy tylko tego jednego zapytania, a dokładniej tej jednej zmiennej.
Wstawiam również funkcje :
F. odpowiedzialna za tworzenie zapytania :
<?php private function update($nm,$val) { try { $stmt = "UPDATE zmienna_sesji SET wartosc_zmiennej = '$strSer' WHERE nazwa_zmiennej = '$nm' AND identyfikator_sesji = $this->native_session_id"; $this->dbhandle->query($stmt); return true; } catch (DBException $e) { } } ?>
Część funkcji kontrolera odpowiedzialnego za obsługę użytkownika:
<?php function __construct(){ $LockCode = $this->user->IsLocked($this->login); if ($LockCode == 1) { if ($this->arrParams[0] == 'logout') { $this->session->LogOut(); } } switch ($this->arrParams[0]) { case 'prevmth': $month = $this->arrParams[1]; $year = $this->arrParams[2]; $askedMonth = $this->getAskedMonth($month); $askedYear = $this->getAskedYear($year); $this->session->set('widok', "miesiac/$askedMonth/$askedYear"); $this->ShowCalendar($askedMonth,$askedYear,$userId,$idGrupy); break; ?>
Funkcja set() wywołuje funkcję update() w momencie gdy dana zmienna już w bazie istnieje.
<?php public function set($nm, $val) { try { $wynik = $this->isInDb($nm); if ($wynik == true) { $this->update($nm,$val); return true; } $stmt = "INSERT INTO zmienna_sesji(identyfikator_sesji, nazwa_zmiennej, wartosc_zmiennej) VALUES ($this->native_session_id , '$nm' , '$strSer')"; $result = $this->dbhandle->query($stmt); } catch (DBException $e) { exit; } ?>
Ostatnia istotna funkcja to query() odpowiedzialna za wysyłanie zapytania do bazy:
<?php public function query($sql) { throw new DBException($e); break; } return $wynik; } ?>