Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] błędy z księżyca
Forum PHP.pl > Forum > Przedszkole
mattie
Witam wszystkich.

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:
  1. <?php
  2. $stmt = "UPDATE zmienna_sesji SET wartosc_zmiennej = '$strSer' WHERE nazwa_zmiennej = '$nm' AND identyfikator_sesji = $this->native_session_id";
  3. echo "<div id='zapytanie'>$stmt</div>";
  4. $this->dbhandle->query($stmt);
  5. ?>

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:
  1. 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 :

  1. <?php
  2. private function update($nm,$val) {
  3. try {
  4. $strSer = serialize($val);
  5. $stmt = "UPDATE zmienna_sesji SET wartosc_zmiennej = '$strSer' WHERE nazwa_zmiennej = '$nm' AND identyfikator_sesji =
  6. $this->native_session_id";
  7. echo "<div id='zapytanie'>$stmt</div>";
  8. $this->dbhandle->query($stmt);
  9. return true;
  10. } catch (DBException $e) {
  11. echo $e;
  12. exit();
  13. }
  14. }
  15. ?>

Część funkcji kontrolera odpowiedzialnego za obsługę użytkownika:
  1. <?php
  2. function __construct(){
  3.  
  4. $this->arrParams = explode( '/',substr( $_SERVER['PATH_INFO'], 1) );
  5. $LockCode = $this->user->IsLocked($this->login);
  6. if ($LockCode == 1) {
  7. if ($this->arrParams[0] == 'logout') {
  8. $this->session->LogOut();
  9. header("Location: http://".$_SERVER['HTTP_HOST']."/index.php");
  10. exit();
  11. }
  12. header("Location: http://".$_SERVER['HTTP_HOST']."/user.php");  
  13. exit();
  14. }
  15.  
  16. switch ($this->arrParams[0]) {
  17.  
  18. case 'prevmth':
  19. $month = $this->arrParams[1];
  20. $year = $this->arrParams[2];
  21. $askedMonth = $this->getAskedMonth($month);
  22. $askedYear = $this->getAskedYear($year);
  23. $this->session->set('widok', "miesiac/$askedMonth/$askedYear");  
  24. $this->ShowCalendar($askedMonth,$askedYear,$userId,$idGrupy);
  25. break;
  26. ?>


Funkcja set() wywołuje funkcję update() w momencie gdy dana zmienna już w bazie istnieje.
  1. <?php
  2. public function set($nm, $val) {
  3. try {
  4. $wynik = $this->isInDb($nm);
  5. if ($wynik == true) {
  6. $this->update($nm,$val);
  7. return true;
  8. }
  9. $strSer = serialize($val);
  10.  $stmt = "INSERT INTO zmienna_sesji(identyfikator_sesji, nazwa_zmiennej, wartosc_zmiennej) VALUES ($this->native_session_id , '$nm' , '$strSer')";
  11.  $result = $this->dbhandle->query($stmt);
  12. }
  13. catch (DBException $e) {
  14. echo $e;
  15. }
  16. ?>

Ostatnia istotna funkcja to query() odpowiedzialna za wysyłanie zapytania do bazy:
  1. <?php
  2. public function query($sql) {
  3. $wynik = mysql_query($sql);
  4. if (empty($wynik)) {
  5. $err = mysql_error();
  6. throw new DBException($e);
  7. break;
  8. }
  9. return $wynik;
  10. }
  11. ?>
nospor
Cytat
PHP błędy z księżyca
To twoj tytul jest jak z księzyca. Popraw tytul na taki, ktory mowi cos o problemie

Cytat
Zastanawiam się jak to możliwe, że wartość zmiennej zostaje zamieniona.
Wartosc zmiennej nie zostaje zamieniona, a obcieta. To roznica. A obcieta pewnie dlatego, ze pole wartosc_zmiennej ma max. dlugosc 16. Zmien na wieksza smile.gif

ps: przenosze bo to z php nie ma zadnego związku. Powinno byc na Mysql, ale z racji "zaawansowanego" problemu jak na mysql to trafia gdzie indziej winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.