<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C/DTD XHTML+Voice 1.2 /EN' 'http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:ev='http://www.w3.org/2001/xml-events'>
<head>
<link rel='canonical' href='http://pabi3.com/blog/zalohovanie-sqlite-databazy-cez-php/' />
<link rel='stylesheet' href='http://pabi3.com/modules/items/voice.css' type='text/css' media='all' />
<form xmlns='http://www.w3.org/2001/vxml' id='title'>
<block>
The article Zalohovanie SQLite databazy cez PHP is written by PaBi3
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>

Je to uz davno, co som pisal skript na zalohovanie databazy. Nie je to ziadny
problem, avsak pri niektorych databazach vam napisanie niecoho podobneho moze trvat aj niekolko hodin. Napriklad pri MySQL je to celkom komplikovane, pretoze musite zistit vsetky vlastnosti stlpca, jeho indexy a podobne. Ja som sa vosiel do menej ako 120 riadkov kodu a zatial som nenarazil na nijaku chybu vo vysledku zalohy.
Nepochybujem, ze s inymi databazami bude zaloha menej zlozita, avsak pri databaze SQLite ano.</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>
Zalohovaci skript

Kazda jedna databaza SQLite obsahuje specialnu tabulku sqlite_master,
ktora definuje schemu databazy. Jej struktura je nasledovna:

CREATE TABLE sqlite_master (
  type TEXT,
  name TEXT,
  tbl_name TEXT,
  rootpage INTEGER,
  sql TEXT
);

Zaloha pomocou PHP sa vdaka tejto tabulke stava velmi jednoduchou zalezitostou (najma zaloha struktury tabuliek).
Nasledujuci extremne jednoduchy skript vytvori zalohu vsetkych tabuliek vratane
ulozenych zaznamov:

&lt;?phpheader('Content-Type:text/plain;&nbsp;charset=utf-8');$db&nbsp;&nbsp;=&nbsp;sqlite_open('sqlite.db');$sql&nbsp;=&nbsp;sqlite_query($db,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"SELECT&nbsp;name,sql&nbsp;FROM&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;."(SELECT&nbsp;*&nbsp;FROM&nbsp;sqlite_master&nbsp;UNION&nbsp;ALL&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;."SELECT&nbsp;*&nbsp;FROM&nbsp;sqlite_temp_master)&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;."WHERE&nbsp;type='table'&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;."ORDER&nbsp;BY&nbsp;name"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);while&nbsp;($row&nbsp;=&nbsp;sqlite_fetch_object($sql))&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$row-&gt;sql.";\n\n";&nbsp;&nbsp;&nbsp;&nbsp;$insert&nbsp;=&nbsp;sqlite_query($db,"SELECT&nbsp;*&nbsp;FROM&nbsp;".$row-&gt;name);&nbsp;&nbsp;&nbsp;&nbsp;$rows&nbsp;&nbsp;&nbsp;=&nbsp;sqlite_num_rows($insert);&nbsp;&nbsp;&nbsp;&nbsp;$fields&nbsp;=&nbsp;sqlite_num_fields($insert);&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($rows&nbsp;&gt;&nbsp;0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;&lt;&nbsp;$rows;&nbsp;$i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;sqlite_fetch_array($insert);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"INSERT&nbsp;INTO&nbsp;".$row-&gt;name."&nbsp;VALUES(";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($j&nbsp;=&nbsp;0;&nbsp;$j&nbsp;&lt;&nbsp;$fields;&nbsp;$j++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($j&nbsp;&gt;&nbsp;0)&nbsp;echo&nbsp;",";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"'".sqlite_escape_string($data[$j])."'";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;");\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"\n";&nbsp;&nbsp;&nbsp;&nbsp;}}

Podobne mozno vytvorit aj zalohu databaz MySQL, MSSQL, ci PostgreSQL.
Presnu strukturu tabuliek vsak ziskate omnoho zlozitejsim sposobom. SQL prikaz
na zoznam tabuliek SQLite nacita aj docasne tabulky. Ak chcete prave tento
typ tabuliek zanedbat, staci SQL prikaz upravit na trochu jednoduchsi:

SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name

Odkazy

SQLite
SQLite FAQ
PHP, rozsirenie SQLite
</block>
</form>
<base href='http://pabi3.com/' />
<title>Zálohovanie SQLite databázy cez PHP</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/zalohovanie-sqlite-databazy-cez-php/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>Zálohovanie SQLite databázy cez PHP</h1>
<ul>
<li ev:event='click' ev:handler='#body'>Speak introduction</li>
<li ev:event='click' ev:handler='#full'>Speak full</li>
</ul>
</body>
</html>

