<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nobigwords.ntxt.net &#187; MySQL</title>
	<atom:link href="http://nobigwords.ntxt.net/tematy/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://nobigwords.ntxt.net</link>
	<description>not too big words not only about web</description>
	<lastBuildDate>Thu, 08 Dec 2011 23:35:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Wyszukiwanie wektorowe [cz. 1]</title>
		<link>http://nobigwords.ntxt.net/2010/10/03/wyszukiwanie-wektorowe-cz-1/</link>
		<comments>http://nobigwords.ntxt.net/2010/10/03/wyszukiwanie-wektorowe-cz-1/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 16:13:37 +0000</pubDate>
		<dc:creator>Piotr Tomaszewski</dc:creator>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[algorytmy wyszukiwania]]></category>
		<category><![CDATA[architektura informacji]]></category>
		<category><![CDATA[bazy danych]]></category>
		<category><![CDATA[dopasowanie]]></category>
		<category><![CDATA[dopasowanie wyników]]></category>
		<category><![CDATA[optymalizacja wyszukiwania]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[portal]]></category>
		<category><![CDATA[portal mieszkaniowy]]></category>
		<category><![CDATA[portal moto]]></category>
		<category><![CDATA[portal nieruchomości]]></category>
		<category><![CDATA[portal samochodowy]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[wyszukiwanie]]></category>
		<category><![CDATA[wyszukiwarki]]></category>

		<guid isPermaLink="false">http://nobigwords.ntxt.net/?p=301</guid>
		<description><![CDATA[Pod mądrą nazwą wyszukiwania wektorowego kryje się odpowiedź na proste pytanie: Jak najlepiej dopasować wyniki wyszukania do zapytania, w sytuacji gdy nie mamy elementów pasujących idealnie? W życiu pytanie to pojawia się na wszelkich stronach z wyszukiwarką produktów, czy to mieszkań, czy aut, czy komputerów. Gdy produkty te są opisane wyłącznie za pomocą liczb, sprawa [...]]]></description>
			<content:encoded><![CDATA[<p>Pod mądrą nazwą wyszukiwania wektorowego kryje się odpowiedź na proste pytanie: </p>
<blockquote><p>Jak najlepiej dopasować wyniki wyszukania do zapytania,<br />
w sytuacji gdy nie mamy elementów pasujących idealnie?</p></blockquote>
<p>W życiu pytanie to pojawia się na wszelkich stronach z wyszukiwarką produktów, czy to mieszkań, czy aut, czy komputerów. Gdy produkty te są opisane wyłącznie za pomocą liczb, sprawa jest prosta. Np.: auto o przebiegu 200 000 km, rok produkcji &ndash; 2006, średnie spalanie 8 l/100 km. Wiadomo, że auta o mniejszym przebiegu są lepsze, niż te spalające więcej, że im dawniej wyprodukowano auto, tym gorzej, że lepiej żeby paliło mniej niż więcej. Czy dzięki temu wiemy, jakie auta będą na pewno lepsze, a jakie gorsze od tego z przykładu? Prawie tak. Prawie, ponieważ nie wiemy, jak przeliczyć jeden rok wieku auta na kilometry przebiegu i litry paliwa.</p>
<p>Zacznijmy więc od sprawy najprostszej, czyli od bazy aut o tylko jednej cesze, czyli opisane rokiem produkcji. Powiedzmy, że w bazie znajdą się dwa auta:</p>
<ol>
<li>A, rok prod. 2001</li>
<li>B, rok prod 2009</li>
</ol>
<p>
Gdy dla szukającego auta do zaakceptowania jest pojazd maksymalnie z 2004 roku, sprawa jest jasna nawet intuicyjnie: wybieramy to z 2009, czyli B.</p>
<p>Jednak jeśli szukający postawi sprawę nieco inaczej, czyli zamiast &laquo;chcę auto maksymalnie z 2004 roku&raquo; powie: &laquo;chcę auto wyprodukowane mniej-więcej w 2004 roku&raquo;, to najbliżej jego ideału jest samochód A, z 2001.</p>
<p>Można mieć wątpliwości, czy wyszukiwarka powinna pokazać auto <i>bliższe</i> zadanym kryteriom, czy też o <i>korzystniejszych parametrach.</i> Rok produkcji to cecha, której wartość wprost przekłada się na jakość auta, zmieńmy ją na taką, która jest neutralna, np. długość pojazdu. Nasza baza zmienia się na taką:
</p>
<ol>
<li>A, długość 390 cm</li>
<li>B, długość 450 cm</li>
</ol>
<p>
Jeśli teraz poszukiwane auto ma mieć 400 cm długości, bardzo blisko tej wartości znajdzie się długość pojazdu A. Gdyby ułożyć samochody z bazy wg dopasowania do zadanych parametrów, A byłoby przed B. To właśnie najprostszy przykład wektorowego opisu wyniku wyszukiwania. Wektor dopasowania to odległość między punktem zadanym przez zapytanie (Z:400 cm) a punktami opisującymi rekordy bazy (A:390 cm i B:450 cm). Wektory dopasowania dla obu aut mają odpowiednio:
</p>
<ol>
<li>Z &#8211; A: abs(390 &#8211; 400) = 10 cm</li>
<li>Z &#8211; B: abs(450 &#8211; 400)  = 50 cm</li>
</ol>
<p><small>funkcja abs(x), czyli wartość bezwzględna ;-)</small></p>
<p>
Dla A długość wektora dopasowania jest 5-krotnie mniejsza niż dla B, więc A jest dużo lepiej dopasowany do zadanych parametrów od B. Kiedy do długości dodamy szerokość, sprawa skomplikuje się o drugi wymiar. Wektor dopasowania będziemy wtedy obliczać jako złożenie składowych, 1-wymiarowych wektorów długości i szerokości. To znana zależność, kojarzona z Pitagorasem. ;) Długość wektora dopasowania to pierwiastek kwadratowy z sumy kwadratów obu wektorów składowych.</p>
<h2>Przekład na SQL</h2>
<p>Przekładając problem na SQL, zaczynamy od takiego pytania:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> samochody
<span style="color: #993333; font-weight: bold;">WHERE</span> dlugosc <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">400</span>;</pre></div></div>

<p>W naszej bazie nie daje ono oczywiście żadnych elementów, czyli zwraca zbiór pusty. Dla naszego poszukiwacza aut to dość frustrująca odpowiedź.<br />
Możemy to nieco poprawić, dodając tolerancję:
</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> samochody
<span style="color: #993333; font-weight: bold;">WHERE</span> dlugosc <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">400</span> <span style="color: #66cc66;">-</span> tolerancja <span style="color: #993333; font-weight: bold;">AND</span>
dlugosc <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">400</span> <span style="color: #66cc66;">+</span> tolerancja;</pre></div></div>

<p>To zwiększa szanse na dobry wynik, ale tylko czasem. Tolerancja może być za mała albo za duża, a zawsze jest kolejnym utrudnieniem dla użytkownika.<br />
Moim zdaniem lepiej będzie tak:
</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> samochody
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> abs<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">400</span> <span style="color: #66cc66;">-</span> dlugosc<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ASC</span>;</pre></div></div>

<p>Wydajnościowo to nienajlepsze rozwiązanie, ale pokazuję tu tylko zasadę. Nienajlepsze, bo spowoduje posortowanie <i>całej</i> bazy aut, w dodatku wg obliczanego, a nie przechowywanego, parametru. W realnych zastosowaniach można uniknąć sortowania wprowdzając nieco więcej logiki przed wykonaniem zapytania.
</p>
<p><small>w roli pojazdu A udział wziął <a href="http://www.ritzsite.demon.nl/Citroen68/Dyane_L.htm">Citroen 1968 Dyane Luxe</a>, w roli pojazdu B - <a href="http://www.samarins.com/reviews/cr-v02.html">Honda CR-V</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://nobigwords.ntxt.net/2010/10/03/wyszukiwanie-wektorowe-cz-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portfel Selfcontrol</title>
		<link>http://nobigwords.ntxt.net/2010/08/19/portfel-selfcontrol/</link>
		<comments>http://nobigwords.ntxt.net/2010/08/19/portfel-selfcontrol/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 09:28:46 +0000</pubDate>
		<dc:creator>Piotr Tomaszewski</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[życie]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[budżet domowy]]></category>
		<category><![CDATA[kontrola finansów]]></category>
		<category><![CDATA[planowanie]]></category>
		<category><![CDATA[płatności]]></category>
		<category><![CDATA[wydatki]]></category>

		<guid isPermaLink="false">http://nobigwords.ntxt.net/?p=293</guid>
		<description><![CDATA[Walcząc ze stereotypem szewca, co bez butów, napisałem sobie (nam) w AIR aplikację do kontrolowania wydatków. Zapisujemy sobie serie i pojedyncze płatności, korzystając z bazy na serwerze. Mamy siatkę roczną, na której sygnalizowane są zaległości i listę z podsumowaniem. Na liście możemy wyświetlić niemal dowolny podzbiór płatności i obejrzeć go na wykresach.]]></description>
			<content:encoded><![CDATA[<p>Walcząc ze stereotypem szewca, co bez butów, napisałem sobie (nam) w AIR aplikację do kontrolowania wydatków. Zapisujemy sobie serie i pojedyncze płatności, korzystając z bazy na serwerze. Mamy siatkę roczną, na której sygnalizowane są zaległości i listę z podsumowaniem. Na liście możemy wyświetlić niemal dowolny podzbiór płatności i obejrzeć go na wykresach.</p>
]]></content:encoded>
			<wfw:commentRss>http://nobigwords.ntxt.net/2010/08/19/portfel-selfcontrol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hosting, porównanie subiektywne</title>
		<link>http://nobigwords.ntxt.net/2010/03/23/hosting-porownanie-subiektywne/</link>
		<comments>http://nobigwords.ntxt.net/2010/03/23/hosting-porownanie-subiektywne/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 22:34:27 +0000</pubDate>
		<dc:creator>Piotr Tomaszewski</dc:creator>
				<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[rynek]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[życie]]></category>
		<category><![CDATA[3306]]></category>
		<category><![CDATA[dmkproject.pl]]></category>
		<category><![CDATA[dostęp]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[home.pl]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[kei.pl]]></category>
		<category><![CDATA[nazwa.pl]]></category>
		<category><![CDATA[ograniczenia]]></category>
		<category><![CDATA[opinia]]></category>
		<category><![CDATA[poddomena]]></category>
		<category><![CDATA[porównanie hostingów]]></category>
		<category><![CDATA[serwery]]></category>
		<category><![CDATA[subdomena]]></category>

		<guid isPermaLink="false">http://nobigwords.ntxt.net/?p=268</guid>
		<description><![CDATA[Mam do czynienia z home.pl, kei.pl, nazwa.pl i dmkproject.pl. Każda z tych firm ma swoje zalety i upierdliwości, o których ciężko przeczytać na stronach z ofertą. Nie mam zamiaru porównywać po kolei każdego parametru, to ma być tylko lista rzeczy, które zauważyłem przy specyficznych okazjach. Pewnie jeszcze nie raz będę edytował tego posta, na razie [...]]]></description>
			<content:encoded><![CDATA[<p>Mam do czynienia z <a title="strona home.pl" href="http://home.pl" target="_blank">home.pl</a>, <a title="strona kei.pl" href="http://kei.pl" target="_blank">kei.pl</a>, <a title="strona nazwa.pl" href="http://nazwa.pl" target="_blank">nazwa.pl</a> i <a title="strona DMK Project" href="http://dmkproject.pl" target="_blank">dmkproject.pl</a>. Każda z tych firm ma swoje zalety i upierdliwości, o których ciężko przeczytać na stronach z ofertą. Nie mam zamiaru porównywać po kolei każdego parametru, to ma być tylko lista rzeczy, które zauważyłem przy specyficznych okazjach. Pewnie jeszcze nie raz będę edytował tego posta, na razie kilka drobiazgów. Gdyby coś się zmieniło, albo jeśli wiesz o podobnych sprawach, będę wdzięczny za info w komentarzu albo e-mailu.</p>
<h2>kei.pl</h2>
<ul>
<li>Ma opcję dodania subdomeny przekierowanej na dowolne publiczne IP. Mnie przydało się to do postawienia hostów deweloperskich pod domeną główną (hosting Kei), ale na innej maszynie (Internet DSL TP SA).</li>
<li>Dziwny limit liczby plików. Nie pamiętam dokładnie jaki, ale konto, niezależnie od pojemności w GB, transferu, mieści tylko określoną liczbę plików. Potem przestaje przyjmować je na FTP, sygnalizując błędy. Ograniczenie to<del datetime="2010-10-11T10:10:17+00:00"> nie jest nigdzie opisane</del>, można dowiedzieć się o nim z infolinii, albo ? co bardziej bolesne ? kopiując serwis bogaty w obrazki&#8230;</li>
<li>Fajna rzecz: możliwość bezpośredniego połączenia się przez port 3306 z serwerem MySQL, bez pośrednictwa PhpMyAdmin (jest również).</li>
</ul>
<h2>home.pl</h2>
<ul>
<li>Nazwy skrzynek pocztowych dotyczą wszystkich domen w ramach konta. Np. mając domenę <em>sklep.pl</em> i <em>biuro.com</em> na jednym koncie home.pl, pocztę nadaną na <em>info@sklep.pl</em> mogę odebrać równie dobrze pod <em>info@biuro.com</em>. To nie musi być problem, ale może.</li>
<li>Limit liczby plików również się pojawia, a wynosi 500 000. Jednak tu wcześniej otrzymujemy maila z ostrzeżeniem i prośbą o &#8216;uporządkowanie&#8217;. Jest też oferta serwera dedykowanego, co wydaje się na miejscu. Jedno, co mi się nie podoba, to powołanie się na ogólny punkt regulaminu zamiast określenie tego jasno w umowie: <i>&#8220;Zwracamy uwagę, że regulamin home.pl w punkcie 16 określa, iż<br />
korzystanie z serwera współdzielonego nie może naruszać integralności<br />
systemu informatycznego home.pl, co w tym przypadku może mieć miejsce.&#8221;</i><small> cytat z maila od home.pl, 2010-03-25</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nobigwords.ntxt.net/2010/03/23/hosting-porownanie-subiektywne/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>polityka bezpieczeństwa home.pl</title>
		<link>http://nobigwords.ntxt.net/2010/02/08/polityka-bezpieczenstwa-homepl/</link>
		<comments>http://nobigwords.ntxt.net/2010/02/08/polityka-bezpieczenstwa-homepl/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 21:29:44 +0000</pubDate>
		<dc:creator>Piotr Tomaszewski</dc:creator>
				<category><![CDATA[bezpieczeństwo]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[3306]]></category>
		<category><![CDATA[baza danych]]></category>
		<category><![CDATA[home.pl]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[połączenie]]></category>
		<category><![CDATA[port 3306]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[zablokowany]]></category>

		<guid isPermaLink="false">http://nobigwords.ntxt.net/?p=266</guid>
		<description><![CDATA[Robiąc &#8220;w internecie&#8221; spotyka się człowiek z hostingiem. No karma taka, nie da się bez hostingu żyć i kropka. Przeżyłem więc już doświadczenia z DMKProject (było fajne, ale wyniosło się do USA i ma długi czas pinga), z nazwa.pl (jedno konto FTP), kei.pl (straszny panel administracyjny), wreszcie home.pl (nie można mieć dwóch osobnych skrzynek pocztowych [...]]]></description>
			<content:encoded><![CDATA[<p>Robiąc &#8220;w internecie&#8221; spotyka się człowiek z hostingiem. No karma taka, nie da się bez hostingu żyć i kropka. Przeżyłem więc już doświadczenia z DMKProject (było fajne, ale wyniosło się do USA i ma długi czas pinga), z nazwa.pl (jedno konto FTP), kei.pl (straszny panel administracyjny), wreszcie home.pl (nie można mieć dwóch osobnych skrzynek pocztowych o tej samej nazwie &#8211; np. biuro@ &#8211; w obrębie jednego konta dla dwóch domen). Każda z tych ofert ma swoje wady i zalety. Zalety są w sumie podobne &#8211; każda z nich zwykle szybko, fachowo i pozytywnie reagowała na moje pytania i prośby. Jednak ostatnio home.pl trochę mnie zdziwiło.</p>
<p>Dla jednej ze stron potrzebowaliśmy połączenia bezpośredniego dla MySQL, na porcie 3306, do synchronizacji bazy z lokalną w biurze. Działało. Aż pewnego dnia admin home.pl stwierdził duży ruch na tym porcie z naszego adresu. Zablokował więc ten ruch &#8220;ze względów bezpieczeństwa&#8221;. Co ciekawe, nadal można się połączyć z dowolnego innego IP. Z mojego punktu widzenia zablokowany został adres najbardziej uprawniony do generowania ruchu, a pozostawiono otwarte połączenie z resztą świata, pełną złoczyńców i pedofilów&#8230; ;-) Teraz więc synchronizacja odbywa się z laptopa przez neostradę, a sens operacji pozostaje dla mnie tajemnicą.</p>
]]></content:encoded>
			<wfw:commentRss>http://nobigwords.ntxt.net/2010/02/08/polityka-bezpieczenstwa-homepl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>porównywanie baz MySQL w PHP</title>
		<link>http://nobigwords.ntxt.net/2009/09/26/porownywanie-baz-mysql-w-php/</link>
		<comments>http://nobigwords.ntxt.net/2009/09/26/porownywanie-baz-mysql-w-php/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 18:26:32 +0000</pubDate>
		<dc:creator>Piotr Tomaszewski</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[bazy danych]]></category>
		<category><![CDATA[compare]]></category>
		<category><![CDATA[compare database]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[database diff]]></category>
		<category><![CDATA[dbdiff]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[synchronizacja]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://nobigwords.ntxt.net/?p=264</guid>
		<description><![CDATA[Często przy pracy nad aplikacjami z bazą SQL zdarza się sytuacja, kiedy baza &#8216;deweloperska&#8217; uległa nieudokumentowanym dokładnie zmianom, i wreszcie trzeba je wdrożyć w wersji produkcyjnej. Oczywiście lepiej byłoby prowadzić dziennik zmian :) Kiedy jednak już jest za późno, przydaje się poniższy skrypt do porównywania baz. Wychwytuje on różnice na poziomie definicji tabel i pól, [...]]]></description>
			<content:encoded><![CDATA[<p>Często przy pracy nad aplikacjami z bazą SQL zdarza się sytuacja, kiedy baza &#8216;deweloperska&#8217; uległa nieudokumentowanym dokładnie zmianom, i wreszcie trzeba je wdrożyć w wersji produkcyjnej. Oczywiście lepiej byłoby prowadzić dziennik zmian :) Kiedy jednak już jest za późno, przydaje się poniższy skrypt do porównywania baz. Wychwytuje on różnice na poziomie definicji tabel i pól, proponując stosowne polecenia typu CREATE, ALTER, itp. Propozycje te nie są doskonałe, trzeba zwracać uwagę zwłaszcza na klucze i wartości domyślne, ale na pewno ułatwia synchronizację.</p>
<p>Skrypt napisany na podstawie <a href="http://adamyoung.net/MySQL-Database-Diff-Script">MySQL Database Diff Script</a>, ale znacznie rozszerzony i zmodyfikowany. Enjoy! :)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>style<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">.</span>deleted<span style="color: #009900;">&#123;</span>
	text<span style="color: #339933;">-</span>decoration<span style="color: #339933;">:</span>line<span style="color: #339933;">-</span>through<span style="color: #339933;">;</span>
	color<span style="color: #339933;">:</span>red<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">.</span>added<span style="color: #009900;">&#123;</span>
	color<span style="color: #339933;">:</span>green<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>style<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span> ?php
<span style="color: #009933; font-style: italic;">/**
 * original by Adam Young http://adamyoung.net/
 * modified and extended 2009-09-26 by ptrk http://nobigwords.ntxt.net/ 
 * 
 */</span>
<span style="color: #000088;">$src_host</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$src_user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$src_pass</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$src_db</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'baza32_superskl_emisja'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$dst_host</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$dst_user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$dst_pass</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$dst_db</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'baza32_superskl'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$src</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src_host</span><span style="color: #339933;">,</span> <span style="color: #000088;">$src_user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$src_pass</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src_db</span><span style="color: #339933;">,</span> <span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Could not find/USE source database: <span style="color: #006699; font-weight: bold;">{$src_db}</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$src_tables</span> <span style="color: #339933;">=</span> getTables<span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #000088;">$dst</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dst_host</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dst_user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dst_pass</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dst_db</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dst</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Could not find/USE destination database: <span style="color: #006699; font-weight: bold;">{$dst_db}</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$dst_tables</span> <span style="color: #339933;">=</span> getTables<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dst</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$src_tables</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$t</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$table</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$found</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dst_tables</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$t</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$dst_table</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dst_tables</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$t</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$dst_table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$diff</span> <span style="color: #339933;">=</span> compareDefinitions<span style="color: #009900;">&#40;</span><span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">definition</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dst_table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">definition</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$diff</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$table-&gt;name}</span>&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;b&gt;<span style="color: #006699; font-weight: bold;">{$table-&gt;name}</span> is different&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&quot;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$alters</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$diff</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$col</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;li&gt;<span style="color: #006699; font-weight: bold;">$col</span> : &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'info'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/li&gt;&quot;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$alters</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;alter table `&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$dst_table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;` &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'alter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/ul&gt;'</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&amp;gt;pre&amp;lt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$alters</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; &amp;gt;/pre&amp;lt;&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dst_tables</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$found</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;span class='deleted'&gt;<span style="color: #006699; font-weight: bold;">{$table-&gt;name}</span> &lt;/span&gt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&amp;gt;pre&amp;lt;<span style="color: #006699; font-weight: bold;">{$table-&gt;create}</span>&amp;gt;/pre&amp;lt;&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> getTables<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$rsrc</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SHOW TABLES'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$tables</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_row</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rsrc</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$table</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> table<span style="color: #009900;">&#40;</span>
			<span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
			getTableDef<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #339933;">,</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			getTableCreate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #339933;">,</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$tables</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$tables</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> getTableDef<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #339933;">,</span> <span style="color: #000088;">$table</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$rsrc</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;DESCRIBE `<span style="color: #006699; font-weight: bold;">{$table}</span>`&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_row</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rsrc</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$type</span><span style="color: #339933;">,</span> <span style="color: #000088;">$null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$default</span><span style="color: #339933;">,</span> <span style="color: #000088;">$extra</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span><span style="color: #339933;">,</span> <span style="color: #000088;">$null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$default</span><span style="color: #339933;">,</span> <span style="color: #000088;">$extra</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> getTableCreate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #339933;">,</span> <span style="color: #000088;">$table</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$rsrc</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SHOW CREATE TABLE `<span style="color: #006699; font-weight: bold;">{$table}</span>`&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_row</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rsrc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> table <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$definition</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$create</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">function</span> table<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$def</span><span style="color: #339933;">,</span> <span style="color: #000088;">$create</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$name</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">definition</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$def</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$create</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> compareDefinitions<span style="color: #009900;">&#40;</span><span style="color: #000088;">$defA</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defB</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$defA</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$col</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$colDefA</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$defB</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'info'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;span class='deleted'&gt;deleted &lt;/span&gt;&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'alter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;drop column `&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$col</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;`&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">','</span><span style="color: #339933;">,</span><span style="color: #000088;">$colDefA</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">','</span><span style="color: #339933;">,</span><span style="color: #000088;">$defB</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
				<span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$typeA</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nullA</span><span style="color: #339933;">,</span> <span style="color: #000088;">$keyA</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaultA</span><span style="color: #339933;">,</span> <span style="color: #000088;">$extraA</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$colDefA</span><span style="color: #339933;">;</span>
				<span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$typeB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nullB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$keyB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaultB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$extraB</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$defB</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$info</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$typeA</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$typeB</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$info</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;different type <span style="color: #006699; font-weight: bold;">$typeA</span>/<span style="color: #006699; font-weight: bold;">$typeB</span>, &quot;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$nullA</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$nullB</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$info</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;null <span style="color: #006699; font-weight: bold;">$nullA</span>/<span style="color: #006699; font-weight: bold;">$nullB</span>, &quot;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyA</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$keyB</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$info</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;key: <span style="color: #006699; font-weight: bold;">$keyA</span>/<span style="color: #006699; font-weight: bold;">$keyB</span>, &quot;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$defaultA</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$defaultB</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$info</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;default: <span style="color: #006699; font-weight: bold;">$defaultA</span>/<span style="color: #006699; font-weight: bold;">$defaultB</span>, &quot;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$extraA</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$extraB</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$info</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;extra: <span style="color: #006699; font-weight: bold;">$extraA</span>/<span style="color: #006699; font-weight: bold;">$extraB</span>, &quot;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'info'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$info</span><span style="color: #339933;">,</span><span style="color: #0000ff;">', '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'alter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>	<span style="color: #0000ff;">&quot;change `<span style="color: #006699; font-weight: bold;">$col</span>` `<span style="color: #006699; font-weight: bold;">$col</span>` <span style="color: #006699; font-weight: bold;">$typeA</span> &quot;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'alter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.=</span>	<span style="color: #009900;">&#40;</span><span style="color: #000088;">$defaultA</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">''</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;default '<span style="color: #006699; font-weight: bold;">$defaultA</span>' &quot;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'alter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.=</span>	<span style="color: #009900;">&#40;</span><span style="color: #000088;">$nullA</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'NO'</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">'NOT NULL '</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'alter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.=</span>	<span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$extraA</span> &quot;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #009900;">&#125;</span>
			<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$defB</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$col</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$defB</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$colB</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$colDefB</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$typeB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nullB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$keyB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaultB</span><span style="color: #339933;">,</span> <span style="color: #000088;">$extraB</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$colDefB</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$colB</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'info'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;span class='added'&gt;added&lt;/span&gt;&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$colB</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'alter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;add `<span style="color: #006699; font-weight: bold;">$colB</span>` <span style="color: #006699; font-weight: bold;">$typeB</span> &quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> errors<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #990000;">mysql_errno</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">mysql_error</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://nobigwords.ntxt.net/2009/09/26/porownywanie-baz-mysql-w-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

