Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z połączeniem do bazy sqlite
Forum PHP.pl > Forum > PHP
divx_divine
Witam. Chciałbym mieć możliwość ingerowania w plik serwera sqlite na pewnym serwerze gry. Serwer pewnej gry jest oparty na języku squirrel. Do zaimplementowania bazy używamy modułu sq_lite. Rozszerzenie pliku z serwerem to .sqlite. I teraz nie wiem jak się połączyć. Próbowałem różnych metod, np. sqlite_open. Jednak połączenie zakończone niepowodzeniem, oto komunikat:

  1. Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database in \sq\index.php on line 3
  2. file is encrypted or is not a database


Bardzo mi zależy na możliwość w ingerowanie bazy przez stronę internetową i nie wiem jak na to wszystko poradzić. Niestety w grę nie wchodzi mysql.

@edit: podrzucam kod, którego teraz użyłem do połączenia z bazą:
  1. <?php
  2.  
  3. if ($db = sqlite_open('serwer.sqlite', 0666, $sqliteerror)) {
  4.  
  5. $result = sqlite_query($db,'select bar from foo');
  6. var_dump(sqlite_fetch_array($result));
  7. } else {
  8. die ($sqliteerror);
  9. }
  10. ?>
  11. ?>


@edit2:

Podrzucam jeszcze przykładową bazę, może komuś się uda połączyć.
Serwer.sqlite
BaN
To jest baza w formacie SQLite 3, musisz używać metod klasy SQLite3
divx_divine
Okej, dzięki wielkie za pomoc. Teraz mogę przeglądać dane z bazy.
Tylko teraz pojawia się pewien problem. Chciałem wyciągnąć z bazy odpowiednie rekordy, wykryte przez zapytanie, bez nazw pól, oraz "Array (Dane)"
Np korzystając z SQLite3:: query mam taki efekt:

Kod, który użyłem
  1. <?php
  2. $db = new SQLite3('serwer.sqlite');
  3.  
  4.  
  5. $results = $db->query("SELECT Name,Level FROM stats Where Name='gracz'");
  6. while ($row = $results->fetchArray()) {
  7. var_dump($row);
  8. }
  9. $db->close();
  10. ?>


Efekt:
  1. array(4) { [0]=> string(5) "gracz" ["Name"]=> string(5) "gracz" [1]=> int(9) ["Level"]=> int(9) }



Efekt, jaki chciałbym uzyskać:
  1. gracz 1


Albo ewentualnie, żeby każde różne pole było inną zmienną, które potem mógłbym swobodnie formatować np.

  1. <?php
  2. //jakiś kod, łączący się z bazą, wykonujący zapytanie, tworzący z każdego pola zmienną
  3.  
  4. $name=["Wynik1pola"];
  5. $level=["Wynik2pola"];
  6.  
  7. echo "<b>Nick:</b> " . $name . "<br /> <b>Level:</b>" . $level;
  8. ?>



Czy dałoby się uzyskać taki efekt?
Quantum
  1. echo $row['name'], ' ', $row['level'];

wstaw do pętli, a jakbyś chciał zrobić drugim sposobem to przed pętlą:
  1. $players = array();

w pętli:
  1. array_push($players, array($row['name'], $row['level']));

i możesz sobie swobodnie użyć w kodzie:
  1. ...
  2.  
  3. foreach ($players as $player) {
  4. echo $player[0], ' ', $player[1], '<br/>';
  5. }

divx_divine
Cytat(Quantum @ 19.05.2012, 20:13:36 ) *
...wstaw do pętli, a jakbyś chciał zrobić drugim sposobem to przed pętlą...


O takie coś właśnie mi chodziło. Dokładnie taki efekt chciałem uzyskać. Quantum, gdybyś mógł jeszcze zerknąć, czy wszystko dobrze wstawiłem, tak jak zalecałeś, bo nie jestem pewny czy dobrze załapałem. Jestem początkujący w php. smile.gif

  1. <?php
  2. $db = new SQLite3('serwer.sqlite');
  3.  
  4.  
  5. echo "<hr /><br /><strong>Zobacz: </strong><br/>";
  6.  
  7.  
  8. $Names = array();
  9. $results = $db->query("SELECT ID,Name,Cost,Owner FROM cars WHERE Owner='Brak'");
  10. while ($row = $results->fetchArray()) {
  11. array_push($Names, array($row['ID'], $row['Name'], $row['Cost']));;
  12. }
  13.  
  14. foreach ($Names as $Name) {
  15. echo '<b>ID: </b>', $Name[0], ' ', ' <b>Model: </b>', $Name[1], ' <b>Cena: </b>', $Name[2], '$ <br/>';
  16. }
  17.  
  18. echo "<hr>";
  19.  
  20. $db->close();
  21. ?>
BaN
Moim zdaniem nie ma sensu robić dwóch pętli, po drugie nie ma sensu aby baza zwracała wyniki zapytania z indeksami numerycznymi i tekstowymi, zatem
  1. $db = new SQLite3('serwer.sqlite');
  2. echo "<hr /><br /><strong>Zobacz: </strong><br/>";
  3. $results = $db->query("SELECT ID,Name,Cost,Owner FROM cars WHERE Owner='Brak'");
  4. while ($row = $results->fetchArray(SQLITE3_ASSOC)) {
  5. echo '<b>ID: </b>', $row['ID'], ' ', ' <b>Model: </b>', $row['Name'], ' <b>Cena: </b>', $row['Cost'], '$ <br/>';
  6. }
  7. $db->close();
  8. echo "<hr />";
divx_divine
Okej, będe korzystać z Twojego zapytania, Ban. Wielkie dzięki za pomoc. Mam jeszcze jedno pytanie, w pliku, którym wykonuję zapytanie i wyświtlam je w przeglądarce, nie wyświetla polskich znaków, mimo tego, że przekonwertowałem plik na UTF-8. Nie wie ktoś, gdzie mógłby leżeć problem?
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.