Poznajemy SQLite

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

Poznajemy SQLite

Post autor: swpok »

Poznajemy SQLite
w aspekcie języka PHP zorientowanego strukturalnie.

1. Wstęp
Celem tego artykułu jest przedstawienie coraz większego konkurenta MySQL a mianowicie SQLite. Postaram się w nim przybliżyć zarówno plusy jak i minusy tego rozwiązania, a także sposób implementacji w języku PHP. No to zaczynamy [; .

2. Co to jest i jak to działa ?
SQLite to biblioteka napisana w języku C#, implementująca silnik SQL. Została stworzona przez Richard'a Hipp'a i jest dostępna na licencji public domain*.

Biblioteka ta daje możliwość używania bazy danych bez konieczności uruchamiana oddzielnego procesu jak to jest np. w przypadku MySQL. Zawartość bazy danych przetrzymywana jest w jednym pliku binarnym(do 2 TB wielkości). SQLite jest utrzymywany na dysku przy użyciu drzew binarnych**.Osobne drzewo jest używane dla każdej z tabel i każdego z indeksów.

SQLite rozwiązuje odwieczny problem programistów przechowujących dane w plikach płaskich, a mianowicie blokowanie i dostęp współbieżny.

3. Plusy i minusy
Głównym plusem tej bazy danych jest wydajność(szczególnie przy wykonywaniu zapytań typu INSERT i SELECT), a także wieloplatformowość(baza działa na zasadzie rozszerzenia języka PHP). Niestety nie jest to rozwiązanie wolne od wad. Podczas procesu dopisywania nowych danych SQLite musi zablokować cały plik, aż do czasu zakończenia operacji. Zatem rozwiązanie to nie jest wydajne w sytuacjach gdy dane podlegają ciągłym zmianom. Drugim poważnym minusem jest brak pojęcia praw dostępu do bazy danych(znanym chociażby z MySQL'a), przez co nie możemy stworzyć "bezpiecznej" tabeli do której dostęp mieliby tylko uprawnieni użytkownicy. W skrócie oznacza to, że musimy sami stworzyć system kontroli dostępu, poprzez nadawanie praw do zapisu i odczytu odpowiednim plikom. Rozwiązanie takie nie jest wygodne.

Podsumowując SQLite nie nadaje się do zastosowań na witrynach gdzie dane podlegają ciągłym zmianom, a także tam gdzie jest wymagany system kontroli dostępu. Jednak na małych i średnich stronach rozwiązanie to może okazać się naprawdę wydajne. W końcu do stworzenia tabeli z kilkunastoma rekordami nie potrzeba całego "kombajna" jakim jest niewątpliwie MySQL.

4. Skąd to wziąć i jak zainstalować ?

Windows :
Rozszerzenie SQLite jest standardowo dostarczane z pakietem PHP5. W pliku php.ini***
wystarczy usunąć średnik sprzed extension=php_sqlite.dll( w systemach Windows), aby uaktywnić SQLite.
W przypadku PHP4 obsługa SQLite jest zaimplementowana w wersjach od 4.3.x wzwyż.
Samą bibliotekę jednak trzeba ściągnąć i zainstalować oddzielnie. Pobieramy ją z http://snaps.php.net/win32/PECL_STABLE/php_sqlite.dll a następnie kopiujemy do folderu z rozszerzeniami języka PHP. Pozostało nam już tylko w sekcji Extensions pliku php.ini dodać extension=php_sqlite.dll.

Linuks :
W PHP5 sytuacja jest podobna do systemów Windows. Rozszerzenie powinno być dostarczone razem z pakietem PHP oznaczone numerkiem 5. Zatem w pliku php.ini szukamy slowa kluczowego php_sqlite.so, dalej postepujemy tak jak w przypadku Windows'a.

Jeżeli posiadamy PHP w wersji 4 mamy do wyboru dwie opcje instalacji

Instalacja z pakietu :
Instalacja SQLite z pakietu ogranicza się tylko do wywołania systemu zarządzania pakietami z odpowiednimi argumentami. W tym punkcie opisze sposób instalacji pakietu SQLite za pomocą najbardziej znanych systemów zarządzania pakietami, a mianowicie APT i Yum.
Odpowiednio dla zainstalowanego w naszym distrze systemu zarządzania pakietami inicjujemy powłoke systemową i wpisujemy :

APT:
apt-get install php4-sqlite

Yum:
yum install php4-sqlite

Nastepnie do php.ini dodajemy :
[sqlite]
extension="sqlite.so"


Instalacja ze źródeł :
¦ciągamy źródła z http://pecl.php.net/package/SQLite.
Po udanym procesie pobierania źródeł rozpakowujemy je i kompilujemy w folderze gdzie przechowujemy resztę rozszerzeń.
Na koniec dodajemy do pliku php.ini :
[sqlite]
extension="sqlite.so"


Oto przykład :
wget http://pecl.php.net/get/SQLite-1.0.tgz
tar xzf SQLite-1.0.tgz
cd sqlite
export PHP_PREFIX="/usr"
$PHP_PREFIX/bin/phpize
./configure
make
make install


5. Typy danych
SQLite pod tym względem jest bardzo ubogi. Wszystko w nim jest łańcuchem znaków. Dla przykładu możemy zdefiniować kolumne typu INT, jednak po wprowadzeniu do tej kolumny ciągu znaków SQLite nie zwróci żadnego błędu. Typ kolumny(nakładany podczas jej tworzenia) ma znaczenie tylko przy sortowaniu np. SQLite musi wiedzieć co będzie pierwsze 3 czy 6 ? Drugim ważnym powodem nakładania typów danych na kolumny jest przejrzystość tabeli( zawsze lepiej wiedzieć gdzie co jest [; ).

6. Implementacja
W poprzednich punktach poznaliśmy sposób instalacji, zasade działania, a także plusy i minusy SQLite. Czas poznać w praktyce moc SQLite.

6.1 Podstawy
Całość połączenia z bazą danych ogranicza się do podania scieżki dostępu do owej bazy.
Odbywa się to za pomocą funkcji sqlite_open()

Kod: Zaznacz cały

sqlite_open('/sciezka_do_bazy_danych/books.db'); 
Powyższy kod otworzy plik bazy danych znajdujący się w /sciezka_do_bazy_danych/books.db, lub w razie próby otwarcia pliku bazy danych który nie istnieje stworzy nowy plik books.db.Po więcej informacji nt. funkcji sqlite_open(); odsyłam do manual'a : http://pl.php.net/manual/pl/function.sqlite-open.php

Po "połączeniu" z bazą danych nie musimy wybierać tabeli(jak to ma miejsce np. w MySQL), spowodowane jest to wcześniej wspomnianym brakiem systemu kontroli dostępu. Możemy więc od razu wysłać zapytanie do silnika SQL.

Kod: Zaznacz cały

sqlite_query($uchwyt_ db,"Zapytanie"); 
Połączenie z bazą danych zamykamy funkcją sqlite_close();

Całość może wyglądać np. tak :

Kod: Zaznacz cały

$db = sqlite_open('/sciezka_do_bazy_danych/books.db');
sqlite_query($db,"CREATE TABLE books(autor VARCHAR(100), tytul VARCHAR(100)) ");
sqlite_close($db); 
6.1.1 Wstawianie danych
Wstawianie danych odbywa się za pomocą SQL'owego INSERT'a

Kod: Zaznacz cały

sqlite_query($uchwyt_db,"INSERT INTO books VALUES('Sienkiewicz','Krzyzacy') "); 
Aby uniknąć problemu z cudzysłowami i innymi znakami specjalnymi filtrujemy dane funkcją sqlite_escape_string();

Całość dotychczasowego skryptu mogłaby wyglądać tak :

Kod: Zaznacz cały

$db = sqlite_open('/sciezka_do_bazy_danych/books.db');

$autor = sqlite_escape_string ($autor);
$tytul = sqlite_escape_string ($tytul)

sqlite_query($uchwyt_db,"INSERT INTO books VALUES('$autor','$tytul') ");

sqlite_close($db); 
6.1.2 Odczytywanie danych
Aby odczytać dane z SQLite należy wywołać funkcje sqlite_query() z instrukcją SELECT, a następnie przejść kolejno przez zwrócone przez nią wyniki. Obrazuje to poniższy przykład :

Kod: Zaznacz cały

$query = sqlite_query($uchwyt_db,"SELECT * FROM books");
while($row = sqlite_fetch_array($query)
{
 // Operacje na $row
}
 
Osoby mające styczność z MySQL zauważyły na pewno podobny sposób implementacji w obu przypadkach.

W sytuacjach gdy dużą role będzie odgrywać szybkość działania lepiej będzie użyć funkcji sqlite_array_query(); , która w tym samym kroku odczyta dane i umieści je w tablicy.

Kod: Zaznacz cały

$query = sqlite_array_query($uchwyt_db," SELECT * FROM books");
foreach($table as $value)
{
// Operacje  na $value
}
 
Na szczególną uwagę przy odczycie danych zasługuje drugi parametr funkcji sqlite_fetch_array().

Standardowo funkcja sqlite_fetch_array() zwraca tablice zawierającą zarówno klucze liczbowe jak i asocjacyjne. Standardowo takie "zachowanie" tej funkcji jest na rękę programiście który zarówno może odwoływać się do danych w tablicy za pomocą kluczy liczbowych jak i asocjacyjnych. Problem jednak może powstać w przypadku zagnieżdżenia w pętli while(), pętli foreach() podczas odczytu danych jak to widać na przykładzie :

Kod: Zaznacz cały

$query = sqlite_query($uchwyt_db,"SELECT * FROM books");
while($row = sqlite_fetch_array($query)
{
  foreach($row as $value)
  {
  echo $value .'<br>';
  &#125;
&#125; 
Dane z każdej kolumny zostaną wyświetlone dwukrotnie . Aby temu zapobiec do funkcji sqlite_fetch_array() trzeba przekazywać dodatkowy argument :

SQLITE_NUM - przechowywane będą tylko klucze liczbowe
SQLITE_ASSOC - przechowywane będą tylko klucze asocjacyjne
SQLITE_BOTH - przechowywane będą obydwa typy kluczy

6.2 Indeksy
Jak wiadomo stosowanie indeksów jest chyba najprostszą drogą do zwiększenia wydajności skryptu, pod kątem wyszukiwania i sortowania danych pochądzących z bazy danych. Większość osób mająca styczność z inną relacyjną bazą danych np. MySQL'em zapewne wie co to są indeksy.Więc następne pare linijek może spokojnie ominąć.

Podczas przeszukiwania tabeli nie zawierającej żadnych indeksów SQLite musi przeszukiwać tabele wiersz po wierszu porównując wartości. W sytuacji gdy "polom wyszukiwania" nadamy indeksy, SQLite odwoła się do właśnie takiego specjalnie stworzonego pola, dzięki któremu odnalezienie lokalizacji interesujących nas danych będzie znacznie szybsze.

W przypadkach gdy z góry wiadomo, że szuakanie będzie odbywało się pod kątem danych zawartych w konkretnych polach. Możemy je oznaczyć jako unikatowe. Spowoduje to automatyczne indeksowanie tych pól.

Kod: Zaznacz cały

sqlite_query&#40;$uchwyt_db,"CREATE TABLE books&#40;autor VARCHAR&#40;100&#41; UNIQUE, tytul VARCHAR&#40;100&#41;&#41; "&#41;; 
Nadawanie indeksów na już istniejące pola odbywa się poprzez instrukcje CREATE INDEX.
Pokazuje to poniższy przykład :

Kod: Zaznacz cały

sqlite_query&#40;$uchwyt_db,"CREATE INDEX books_autor_index ON books&#40;autor&#41;" &#41;; 
6.3 Klucze główne
Kolejnym szybkim sposobem na zwiększenie wydajności skryptu jest zastosowanie kluczy głównych. Ponownie osoby mające styczność z tym zagadnieniem mogą opuścić kilka poniższych linii.

Klucz główny jest unikatowym identyfiaktorem wiersza. Pole pełniące role klucza głównego musi zawierać wartości całkowito-liczbowe . Nie musimy jednak sami nadawać wartości tym polom, ponieważ zrobi to za nas silnik SQL, np. pierwszemu wierszowi SQLite przyporządkuje wartość 1, drugiemu 2 itd ..

Przejdźmy zatem do praktyki. Aby stworzyć owe identyfikatory pól musimy utworzyć kolumne typu INTEGER PRIMARY KEY.

Kod: Zaznacz cały

sqlite_query&#40;$uchwyt_db,"CREATE TABLE books&#40;bookid INTEGER PRIMARY KEY , autor VARCHAR&#40;100&#41; , tytul VARCHAR&#40;100&#41; "&#41; &#41;; 
Powyższy przykład utworzy tabele z takimi kolumnami :

bookid || autor || tytul

W której to wszystkie pola kolumny bookid będą spełniać role kluczy głównych.
Aby SQLite wypełnił automatycznie pole oznaczone jako klucz główny podczas wstawiania danych trzeba jako wartość podać NULL. Na przykład :

Kod: Zaznacz cały

sqlite_query&#40; $uchwyt_db,"INSERT INTO books VALUES&#40;NULL,'Sienkiewicz','Krzyzacy'&#41; "&#41;; 
Jeżeli jednak sami chcemy nadać mu wartość po prostu wprowadzamy liczbe całkowitą na to miejsce.

Przydatna przy okazji kluczy głównych może okazać się funkcja sqlite_insert_rowid() zwracająca wartość klucza głównego ostatnio wstawianego wiersza.

6.4 Transakcje
Na szczególną uwagę w SQLite zasługują transakcje, które pozwalają zwiększyć wydajność skryptu. Za każdym razem gdy wywołamy funkcje sqlite_query(), sqlite_connect() etc .. SQLite musi wykonać pare zadań(blokowanie dostępu do pliku , odczyt pliku , etc ... ) . Zamiast więc za każdym razem wywoływać funkcje, można zgrupować zapytania w jedną transakcje. Funkcja zostanie wywołana tylko raz, a co za tym idzie ograniczymy robote
SQLite'owi
Użycie transakcji :

Kod: Zaznacz cały

$sql = 'BEGIN;';

for&#40;&#40;int&#41;$i = 0; $i <= 100; $i++&#41;
&#123;
  $sql  .= "INSERT INTO books VALUES&#40;'Sienkiewicz','Krzyzacy'&#41;;";
&#125;

$sql  .= 'COMMIT;';

sqlite_query&#40;$uchwyt_db , $sql&#41;;
 
Przykład bardziej z życia :

Kod: Zaznacz cały

sqlite_exec&#40;$uchwyt_db,
"BEGIN;
CREATE TABLE books&#40;bookid INTEGER PRIMARY KEY , autor VARCHAR&#40;100&#41; , tytul VARCHAR&#40;100&#41; &#41;;
INSERT INTO books VALUES&#40;NULL,'Sienkiewicz','Krzyzacy'&#41;;
INSERT INTO books VALUES&#40;NULL,'Kaminski','Kamienie na szaniec'&#41;;
INSERT INTO books VALUES&#40;NULL,'Prus','Lalka'&#41; ;
COMMIT; "
&#41;; 
Jak zapewne zauważyliście w powyższym przykładzie do wykonania tego zapytania została zastosowana funkcja sqlite_exec(). Główna różnica między obydwiema funkcjami(sqlite_exec() i sqlite_query()) polega na odmiennym "zachowaniu" wobec seryjnych zapytań. Pierwsza z nich traktuje swój drugi parametr jako zapytanie wielokrotne tylko wtedy gdy dane przez nią zwrócone nie są używanie(w przypadku gdy są wykonuje zapytanie tylko do końca zanku końca wiersza, czyli średnika), natomiast druga swój drugi parametr z góry traktuje jako serie zapytań.
Więcej na ten temat znajdziecie na : http://pl.php.net/manual/pl/function.sqlite-query.php w sekcji notatki.


6.5 Przechowywanie tabeli w pamięci operacyjnej
SQLite posiada także przydatny mechanizm przechowywania tabeli w pamięci RAM .Z pierwszych lekcji informatyki w szkole zapewne wiecie, że pamięć RAM nie jest pamięcią stałą. Dlatego też nie można odwołać się do zapytania wykonanego np. przy poprzednim odświerzeniu strony. Takie działanie jest nieocenione w aplikacjach, które na początku ładują znaczne ilosći danych, a potem wykonują wiele zapytań.

Włączenie tego mechanizmu ogranicza się jedynie do przekazania argumentu :memory: funkcji sqlite_open() czyli np.

Kod: Zaznacz cały

sqlite_open&#40;':memory:'&#41;; 
Od tej chwili wszystkie wyniki zapytań będą zapisywane w pamięci operacyjnej.

Przykład :

Kod: Zaznacz cały

sqlite_open&#40;':memory:'&#41;;
sqlite_query&#40;"CREATE TABLE books&#40;autor VARCHAR&#40;100&#41; , tytul VARCHAR&#40;100&#41;&#41;"  &#41;; 
6.6 Tworzenie własnych funkcji SQLite
Kolejnym przydatnym mechanizmem w SQLite jest możliwość tworzenia własnych funkcji rozszerzających możliwości bazy danych .

Oto przykład :

Kod: Zaznacz cały

function add_a &#40; $string &#41;
   &#123;
     $string  .=  'a';
     
     return $string ;
   &#125;

   $db = sqlite_open&#40;'/sciezka_do_bazy_danych/books.db'&#41;;
   
   sqlite_create_function&#40;$db, 'add', 'add_a'&#41;;
   $sql = sqlite_query&#40;$db,"SELECT add&#40;autor&#41; AS wynik FROM books "&#41;;
   
   $rows = sqlite_fetch_array&#40;$sql,SQLITE_ASSOC&#41;;
   
   echo $rows["wynik"];
   
   sqlite_close&#40;$db&#41;; 
Jak widać na powżyszym przykładzie stworzenie SQLite'owej funkcji ogranicza się tak naprawde do użycia funkcji sqlite_query_function(), w której to jako drugi argument podajemy nazwe wcześniej stworzonej PeHaPowej funkcji, natomiast jako pierwszy nazwe pod jaką owa PeHaPowa funkcja będzie rozpoznywana przez SQL.

6.7 Obsługa błędów
Tak jak w przypadku innych baz danych, także SQLite posiada swój własny "system" obsługi błędów. W omawianym przeze mnie programowaniu strukturalnym, musimy sprawdzać wartości zwracane przez funkcje, a następnie w zależności od tych wartości logicznych generować błąd. Nie musimy się jednak głowić definiowaniem informacjami o tych błędów, zrobi to za nas SQLite.

W przypadku niepowodzenia podczas wykonania jakiejś czynności SQLite przypisze numer błędu funkcji sqlite_last_error(), która to zwraca numer ostatnio wygenerowanego przez SQLite błędu.Oczywiście sam numer błędu nam, zwykłym śmiertelnikom nic nie będzie mówił.Zatem musimy go przekształcić na coś bardziej zrozumiałego. Do tego celu służy funkcja sqlite_error_string(), przekształcająca ową niezrozumiałą liczbe na w miare wyczerpującą informacje o błędzie.

Przykład :

Kod: Zaznacz cały

if&#40; sqlite_query&#40;$_uchwyt_db, $sql&#41; &#41;
&#123;
// dalsze operacje
&#125;
else
die&#40; sqlite_error_string&#40; sqlite_last_error&#40;$uchwyt_db&#41; &#41; &#41;; 
albo :

Kod: Zaznacz cały

sqlite_create_function&#40;$uchwyt_db, 'add', 'add_a'&#41; or die&#40; sqlite_error_string&#40; sqlite_last_error&#40;$uchwyt_db&#41; &#41;  &#41;; 
Pewną odmienność stanowi tutaj funkcja sqlite_open() , która to w przypadku niepowodzenia informacje o błędzie przypisze zmiennej, którą podaliśmy jako trzeci argument funkcji .

Np.

Kod: Zaznacz cały

sqlite_open&#40;'/sciezka_do_bazy_danych/books.db',0666,$sqlite_error&#41; or die&#40;$sqlite_error&#41;; 
Warto zapoznać się też z drugim argumentem funkcji sqlite_open(), który to poprzez wartość ósemkową określa tryb w jakim otworzymy plik bazy danych.

7. Tytułem zakończenia
Podsumowując SQLite pomimo swojej nazwy, która może sugerować pewną jej "ułomność", obsługuje prawie wszystkie aspekty języka SQL, a także rozszerza go o możliwość definiowania własnych funkcji. Jest to baza danych, która świetnie będzie się spisywać na naszym np. domowym blogu bądź niedużym forum.

Jeżeli jednak po przeczytaniu tego artykułu macie wątpliwości co do wydajności SQLite, a także jak wypada na tle innych baz danych w kwesti wydajności, radze zapoznać się z :
http://www.maciaszek.pl/phpcon/download/sqlite.pdf


Skorowidz nazw :
* Licencja public domain - ogół tekstów, zdjęć, muzyki, dzieł sztuki, oprogramowania itp.,
które na skutek decyzji twórcy, braku spadkobierców lub upływu odpowiedniego czasu stały się dostępne do dowolnych zastosowań bez ograniczeń wynikających z przepisów prawa autorskiego.
** Drzewa Binarne - jeden z rodzajów drzewa (struktury danych), w którym liczba synów każdego wierzchołka wynosi nie więcej niż dwa. Wyróżnia się wtedy lewego syna i prawego syna danego wierzchołka.
*** Php.ini - Plik konfiguracyjny języka PHP.

Bibliografia :
http://www.sqlite.org/
http://pl.php.net/manual/pl/ref.sqlite.php
http://pl.wikipedia.org/wiki/
http://www.filipdewaard.com/21_SQLite_inmemory_databases.html
http://developer.mimer.com/documentation/html_82/Mimer_SQL_Reference_Manual/Intro_SQL_Stds3.html
http://www.maciaszek.pl/phpcon/download/sqlite.pdf


Artykuł opublikowany na licencji : http://creativecommons.org/licenses/by-sa/2.5/
by y00da aka swpok.

Artykuł w bardziej przyjaznej PDF'owskiej wersji : http://www.questbook.cba.pl/sqlite.pdf
Ostatnio zmieniony 05 lip 2006, 16:15:17 przez swpok, łącznie zmieniany 11 razy.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
Monstrual
Posty: 2417
Rejestracja: 05 sie 2005, 15:06:08
Lokalizacja: G-dz
Płeć: Niewybrana
User Agent: Opera Windows 1024x768
Kontakt:

Post autor: Monstrual »

to ja dodam jeszcze ciekawy link do innego wartoścowego artykułu
:arrow: http://webcity.pl/webcity/artykuly.php/t/46
Pozdr
Obrazek
Y-i
Posty: 54
Rejestracja: 04 sie 2005, 15:52:53
Lokalizacja: Nowa Sól
Płeć: Niewybrana
User Agent: Firefox Windows 1024x768

Post autor: Y-i »

To my sami musimy instalowac bazę na swojm koncie??
Awatar użytkownika
Ghoran
Przyjaciel CBA
Posty: 827
Rejestracja: 11 sie 2005, 16:07:58
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768

Post autor: Ghoran »

Jeżeli użyjesz np CMS-a opartego na sqlite to baza "stworzy się" sama.
Czy wiesz, że:
  • W Panelu CBA w sekcji "wsparcie" jest dedykowany system ticketów (obsługi technicznej)
  • Odpowiadamy na Forum oraz na adres mailowy obsluga(malpa)cba.pl
  • Jesteśmy również na Facebooku! Znajdź nas na facebook.com/hostingcba | cba.pl
W czym jeszcze możemy pomóc?
Y-i
Posty: 54
Rejestracja: 04 sie 2005, 15:52:53
Lokalizacja: Nowa Sól
Płeć: Niewybrana
User Agent: Firefox Windows 1024x768

Post autor: Y-i »

A jak jak bym chciał zaisnatlowac proum przemo bo mozna na bazie sql to jak mam to zrobić?
Awatar użytkownika
Ghoran
Przyjaciel CBA
Posty: 827
Rejestracja: 11 sie 2005, 16:07:58
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768

Post autor: Ghoran »

Baza MySQL to nie to samo co SQLite.

http://www.cba.pl/forum/viewtopic.php?t=2512

tutaj masz więcej informacji.
Czy wiesz, że:
  • W Panelu CBA w sekcji "wsparcie" jest dedykowany system ticketów (obsługi technicznej)
  • Odpowiadamy na Forum oraz na adres mailowy obsluga(malpa)cba.pl
  • Jesteśmy również na Facebooku! Znajdź nas na facebook.com/hostingcba | cba.pl
W czym jeszcze możemy pomóc?
Awatar użytkownika
HighVoltage
Posty: 580
Rejestracja: 20 wrz 2005, 11:05:55
Strona na CBA.pl: http://www.altyzm.cba.pl
Płeć: Niewybrana
User Agent: Firefox Windows 1024x768
Kontakt:

Post autor: HighVoltage »

Grzebiąc w Total Commanderze wyczaiłem ten plik: forum.database.
Czy to jest plik bazy danych? Bynajmniej jego zawartość na to wskazywała...
Awatar użytkownika
fuma
Przyjaciel CBA
Posty: 11168
Rejestracja: 01 sie 2005, 14:57:56
Lokalizacja: z jajka niespodzianki :P
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768

Post autor: fuma »

zapewne masz racje ;]
Awatar użytkownika
rabit7
Posty: 4
Rejestracja: 11 lis 2007, 23:17:45
Lokalizacja: wawa
Płeć: Niewybrana
User Agent: Firefox Windows 1280x1024
Kontakt:

sqlite

Post autor: rabit7 »

fuma pisze:zapewne masz racje ;]
Jak to można wykorzystać na stronie domowej ?
Bo ja na razie zielony ; ) jak większość tutaj xd

Jest tutaj masa informacji, ale ja nie wiem jak to wykorzystać.

Mógłby ktoś przybliżyć lub jakiś poradnik dla zielonych ;) ?
rabit7 xD
eltronic
Posty: 1
Rejestracja: 17 gru 2009, 09:57:43
Płeć: Niewybrana
User Agent: Internet Explorer Windows 1280x800

Re: Poznajemy SQLite

Post autor: eltronic »

Witam.
Na dzień dobry odrazu mówię, że jestem zielony niemal we wszystkim :D Mam nadzieję, że pomoże mi ktoś w rozwiązaniu mojego problemu.
otóż tworzę stronkę (zaznaczam że robię to edytorem graficznym, firmową juz zrobiłem, a potrzebuję jeszcze jedną, nie znam html itd.) Chodzi o stronkę, która ma byc dostępna dopiero po rejestracji i późniejszym zalogowaniu. Program, który używam oferuje takie opcje. Powiedzmy, że część tego wszystkiego jakoś mi wychodzi, otwiera się pierwsza strona na której jest przekierowanie do strony rejestracji, tam wpisując to co trzeba i zatwierdzając przenosi do strony logowania, a w międzyczasie przychodzą maile informujące o nowym uzytkowniku. Oczywiście cały pic polega na tym, ze za cholerę nie wiem jak poradzić sobie z bazą danych, chodzi o to czy mam mozliwość przyznania praw użytkownikowi poprzez bazę danych na dalsze wejście do serwisu poprzez jego rejestrację. (zaznaczam odrazu, że interesuje mnie temat w postaci kliknij, wpisz coś żeby skonfigurować, nie znam się na php itd) W samym programie graficznym w którym robię stronkę wpisuję raczej poprawnie wszystkie parametry bazy danych itd. Udało mi się nawet utworzyć tabelę w bazie danych :D Pozostaje kwestia jak to wszystko skonfigurować. Jest ktoś kto mi w tym pomoże pisząc co gdzie mam zrobić?? A tutaj podam link do kilku zrzutów konfiguracyjnych w programie do tworzenenia WWW, oraz zrzut bazy danych, co gdzie mam poklikać żeby było tak jak pisałem, no iczy się tak da bez znajomości czegoś, oto link http://www.eltronic.cba.pl

---- EDIT ----

I jeszcze dla sprostosowania dopiszę, że w opcjach konfiguracji jest coś takiego co widać "utwórz bazę danych" ale tam nic nie mogę wprowadzić żadnych danych, więc nie wiem co dalej. program którym robię stronkę to "WYSIWYG Web Builder 6". Proszę tylko nie piszcie że google pomoże itd. Siedzę juz kilka dni i szukam rozwiązania. poprostu chcę zrobic coś, o czym nie mam zbyt wielkiego pojęcia, a przynajmniej jeszcze narazie, więc czekam na Waszą pomoc :D

---- EDIT ----

Pokombinowałem troszkę jeszcze i możliwe, ze w kratorze opanowałem włącznie z przyciskiem "utwórz bazę danych" Poprostu musiałem skonfigurować połączenie z serwerem w tym programie, a nie przez jakiegos klienta wysyłac pliki. Ale pozostaje jeszcze napewno kwestia samej bazy danych i jej utworzenia, a raczej skofigurowania. Program umozliwia utworzenie panelu admina, ale logując się wyskakuje coś takiego - Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/sites/[regulamin forum: punkt 2.13]/e/l/eltronicsklep/loginadmin.php on line 195, a po kliknieciu na utworzenie użytkownika - Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/sites/[regulamin forum: punkt 2.13]/e/l/eltronicsklep/loginadmin.php on line 146. Nie wiem juz teraz o co biega, pewnie trzeba odpowiednio zrobic kofig bazy dany, a moze i połączenia jeszcze, nie wiem. Nie patrzcie, że tam było cba, a tutaj yoyo, poprostu kombinuję na dwóch serwerach.
chronos
Posty: 27
Rejestracja: 13 kwie 2010, 17:19:45
Strona na CBA.pl: http://chrospace.cba.pl
Płeć: Mężczyzna
User Agent: Chrome Windows 1024x768
Kontakt:

Re: Poznajemy SQLite

Post autor: chronos »

Czy są jakieś limity na ilość jednocześnych połączeń - np select coś tam, bo widzę że po trzecim zapytaniu już więcej nie umi nic zrobić na tej samej bazie . Co jest przyczyną - zwraca "non error" a zapytanie jest prawidłowe :shock:

Proszę o wytłumaczenie mi tego
Sueroski
Posty: 277
Rejestracja: 04 sie 2008, 15:41:58
Strona na CBA.pl: dużoooo
Lokalizacja: 8C7769646E696361
Płeć: Mężczyzna
User Agent: Firefox Windows 1280x1024

Re: Poznajemy SQLite

Post autor: Sueroski »

A tak z ciekawości, czy do SQLite istnieje coś w stylu PMA? Jeśli nie to chętnie bym coś takiego napisał (no już tak mi się nudzi, znam całkiem dobrze to php i nic sensownego do zrobienia nie mogę wymyślić)
Mozilla007
Posty: 18
Rejestracja: 10 maja 2006, 07:36:49
Płeć: Niewybrana
User Agent: Firefox Windows 1280x1024

Re: Poznajemy SQLite

Post autor: Mozilla007 »

Dodaje jakiś przykład od siebie :P
http://www.megaupload.com/?d=KK1RU0WO
PS
Sorki że na megaupload ale nie dało rady załącznika dodać
rootpak
Posty: 7
Rejestracja: 17 lis 2010, 12:26:04
Lokalizacja: Będzin
Płeć: Niewybrana
User Agent: Firefox Windows 1280x800
Kontakt:

Re: Poznajemy SQLite

Post autor: rootpak »

Wprowadzenie do SQLLite dla PHP:
http://devzone.zend.com/article/760

SQLite My Fire!
http://devzone.zend.com/article/644
backlashforblow
Posty: 1
Rejestracja: 06 sie 2011, 13:14:08
Strona na CBA.pl: later
Płeć: Niewybrana
User Agent: Chrome Windows 1152x864

Re: Poznajemy SQLite

Post autor: backlashforblow »

Mam podobny błąd po ostatniej aktualizacji ...
Ale mam tylko jedną wersję sqlite zainstalowany.

Moje rozwiązanie było usunąć. Liferea_1.4 katalogu i Liferea reconfigure. Niestety, wywołuje bardzo dziwne zachowanie: za każdym razem i przełączyć się z jednej wiadomości do innych Liferea; odczuwa potrzebę, aby otworzyć okno nautilus zwiedzania / katalog z mojego systemu. Co więcej, komunikat o błędzie podczas uruchamiania nadal istnieje, bez zmian:

Kod: Zaznacz cały

~ $ Liferea
libnm_glib_nm_state_cb: dbus zwrócił błąd.
   (org.freedesktop.DBus.Error.ServiceUnknown) org.freedesktop.NetworkManager nazwa nie została dostarczona przez. usługi plików

(Liferea: 2417): Gtk-WARNING **: GtkSpinButton: ustawienie regulacji z niezerową rozmiar strony jest przestarzała
ODPOWIEDZ