ďťż
Podstrony
|
telcocafe<?php function db_read($co,$t,$v,$a,$id) { //KOD WYCIĘTY ${$a} = mysql_fetch_row($result); echo $$a; } ?>Zmienne wywołuję funkcją ECHO() w funkcji. Jeśli wywołam $$a, $dinfo (bo taką ma nazwę) - wyświetli się "Array". Jeśli wywołam $$a[0], $dinfo[0] - nic się nie wyświetla. <- I w tym problem. To powinno też działać, gdy w $a jest np. wartość "dgr[0]". Stosowanie $$ ułatwiłoby mi pewne operacje, dlatego pytam, w jaki sposób poprawnie tutaj (funkcja mysql_fetch_row()) można zapisać to jako tablicę. $a zawiera "dinfo". db_read - funkcja odczytująca dane z SQLa... Jaki ma być wynik? Musi być globalna tablica, podana w zmiennej $a, by wszystko z niej dało się odczytać. Jeśli $a ma wartość "test", to $test[0] musi mieć poprawną wartość. Jak to zrobić? Gdyby dało się tak: $GLOBALS["test[0]"], nie byłoby takiego problemu. Czy istnieje funkcja, która zamienia STRING na zmienną (oprócz tego $$)? Użytkownik Ferrari edytował ten post 22 marzec 2005, 22:21 Ja mam klasę ($this): $this->make = mysql_query($query);  IF (mysql_errno())  {  die("".mysql_error()."");  }   while ($row = mysql_fetch_object($this->make))    {    $this->result[] = $row;    $this->num_rows++;    }   mysql_free_result($this->make);  return $this->result; To zwraca tablicę obiektową (lub asocjacyjną - mysql_fetch_assoc) zawierającą efekt działania SELECTA. Cała klasa (z cache) wygląda tak: <?PHP class db { var $user; var $pass; var $db; var $host; var $make; var $result; var $conn; var $aff; function db($hostx, $userx, $passx, $dbx) { $this ->host = $hostx; $this ->user = $userx; $this ->pass = $passx; $this ->db = $dbx; } // Ł±czenie z baz± function connect() { IF ($this->conn != true) { $this->conn = true; $this->connect = mysql_connect($this->host, $this->user, $this->pass, $this->db); IF (!$this->connect) { die ('Nie nawiązano połączenia z bazą danych. Albo baza nawala albo podane dane są złe!'); } $this->connect = mysql_select_db($this->db); IF (!$this->connect) { die ('Nie można połączyć się z bazą danych'); } } } // Przetwarzanie zapytań function query($query) { db::clear(); $cdir = 'cache'; $qr = crc32($query); // HASH $query dla nazwy pliku cache // nazwa tabeli użyta w zapytaniu IF(ereg('FROM [a-zA-z_0-9]*', $query, $tab)) { $table = str_replace('FROM ', '', $tab[0]); } elseIF(ereg('UPDATE [a-zA-z_0-9]*', $query, $tab)) { $table = str_replace('UPDATE ', '', $tab[0]); } ####################################### # QUERY: SELECT # ####################################### IF (is_readable("$cdir/$qr.$table.php") == 1 and filesize("$cdir/$qr.$table.php")!= 0) // JEST plik cache { $plik = fopen("$cdir/$qr.$table.php", "r"); $this->result = fread($plik, filesize("$cdir/$qr.$table.php")); fclose($plik); $this->result = str_replace("<?php exit(); ?>\n", '', $this->result); $this->result = unserialize($this->result); $this->num_rows = count($this->result); return $this->result; } elseIF(ereg('SELECT', $query)) { // Brak pliku cache, query, return i zapisać db::connect(); $this->make = mysql_query($query); IF (mysql_errno()) { die("".mysql_error().""); } while ($row = mysql_fetch_object($this->make)) { $this->result[] = $row; $this->num_rows++; } // zrób plik $out = serialize($this->result); $wskaz = @fopen("$cdir/$qr.$table.php", "w"); @fputs($wskaz, "<?php exit(); ?>\n"); @fputs($wskaz, $out); @fclose($wskaz); mysql_free_result($this->make); return $this->result; } else { ####################################### # NON-SELECT Queries # ####################################### $patch = "$cdir/"; // katalog cache $katalog = @dir($patch) or die ("Wrong cache patch"); while ($plik_kat = $katalog->read()) // Wywalanie odpowiednich plików cache IF(ereg("$table.php", $plik_kat) or filesize("cache/$plik_kat") <= 20) { $kknd = unlink ("$cdir/$plik_kat"); IF (!$kknd) { die('CACHE ERROR: CAN\'T DELETE CACHE FILE<BR />Nie można usun±ć pliku cache. SprawdÄ˝ uprawnienia na katalogu Cache<BR />W systemie windows funkcja unlink może nie działać<BR />On Windows unlink function may not work'); } } $katalog->close(); // Wykonaj zapytanie db::connect(); $this->make = mysql_query($query); IF (mysql_errno()) { die("".mysql_error().""); } //$this->aff = mysql_affected_rows(); $this->insert_id = mysql_insert_id(); return $this->make; } } function insert() { return $this->insert_id; } function clear() { unset($this->make); unset($this->result); unset($this->result); } } ?> (brakuje paru varów na początku lecz nie wpływa to na działanie kodu) Użytkownik Riklaunim edytował ten post 23 marzec 2005, 10:33 Rozszerzę problem... function Funkcja($a) { [zmienna]=mysql_fetch_row(...); //Co wpisać w [zmienna]? } Funkcja zwraca poprawnie już zapełnioną tablicę. Jeśli nazwą zmiennej będzie $GLOBALS[$a], a $a w argumencie będzie stringiem "$test[0]" (czyli tablica), to nic z tego... Samo "$test" spokojnie zadziała. Jak to można najlepiej zrobić, by funkcja zwracała globalną tablicę podaną w $a? Użytkownik Ferrari edytował ten post 23 marzec 2005, 15:54 Spróbuj mysql_fetch_array(); - powinno zwrócić i asocjacyjną i normalną. |
|||
Sitedesign by AltusUmbrae. |