Kapitola 46. Zßle╛itosti databßzφ

Tato sekce se zab²vß Φast²mi otßzkami okolo vztahu PHP a databßzφ. Ano, PHP dnes m∙╛e virtußln∞ p°istupovat ke kterΘkoli dostupnΘ databßzi.

1. Sly╣el jsem, ╛e lze z PHP p°istupovat k Microsoft SQL Serveru. Jak?
2. Lze p°istupovat k databßzφm Microsoft Access?
3. Upgradoval jsem na PHP 4 a MySQL mi te∩ hlßsφ "Warning: MySQL: Unable to save result set in ...". Co se d∞je?
4. Po instalaci podpory sdφlenΘho MySQL havaruje Apache v moment∞, kdy naΦφtß libphp4.so. Lze to vy°e╣it?
5. ProΦ dostßvßm chybu, kterß vypadß n∞jak takto: "Warning: 0 is not a MySQL result index in <file> on line <x>" nebo "Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>?

1. Sly╣el jsem, ╛e lze z PHP p°istupovat k Microsoft SQL Serveru. Jak?

Na strojφch s Windows m∙╛ete jednodu╣e pou╛φt zabudovanou podporu ODBC a sprßvn² ovladaΦ ODBC.

Na Unixov²ch strojφch m∙╛ete k p°φstupu na Microsoft SQL Servery pou╛φt ovladaΦ Sybase-CT, proto╛e tyto protokoly jsou (alespo≥ z v∞t╣iny) kompatibilnφ. V Sybase p°ipravili volnou verzi pot°ebn²ch knihoven pro Linux. Pro jinΘ UnixovΘ systΘmy musφte kontaktovat Sybase k zφskßnφ sprßvn²ch knihoven. Podφvejte se takΘ na odpov∞∩ na p°φ╣tφ otßzku.

2. Lze p°istupovat k databßzφm Microsoft Access?

Ano. Pokud pracujete pod Windows 9x/Me nebo NT/2000, v╣echny pot°ebnΘ nßstroje ji╛ mßte k dispozici - m∙╛ete pou╛φt ODBC a ovladaΦe pro ODBC k databßzφm Microsoft Access.

Pokud pou╛φvßte PHP na Unixu a chcete komunikovat s databßzemi MS Access b∞╛φcφch na Windows, budete pot°ebovat ODBC ovladaΦe pro Unix. OpenLink Software mß unixovΘ ovladaΦe pro ODBC, kterΘ zde vyhovφ. Existuje pilotnφ program, kdy si m∙╛ete stßhnout zku╣ebnφ kopii, kterß mß neomezenou zku╣ebnφ dobu; ceny komerΦnφ verze s podporou zaΦφnajφ na 675 USD.

Jinou alternativou je pou╛φt SQL server, kter² mß ODBC ovladaΦe pro Windows a pou╛φt ho k ulo╛enφ dat, ke kter²m pak m∙╛ete p°istupovat z aplikace Microsoft Access (pomocφ ODBC) a z PHP (pomocφ vestav∞n²ch ovladaΦ∙), nebo pou╛φt souborov² meziformßt, kterΘmu rozumφ Access i PHP (nap°. obyΦejnΘ soubory nebo databßze dBase). K tomuto bodu Tim Hayes z OpenLink soiftware pφ╣e:
Pou╛itφ jinΘ databßze jako meziformßtu nenφ dobr² nßpad, pokud m∙╛ete pou╛φt
ODBC z PHP p°φmo na va╣φ databßzi - nap°. pomocφ ovladaΦ∙ od OpenLink software.
Kdy╛ meziformßt pou╛φt musφte, OpenLink nynφ uvolnil Virtuoso (virtußlnφ
databßzov² stroj) pro WinNT, Linux a jinΘ unixovΘ platformy. Nav╣tivte
prosφm na╣i website a zdarma si ho
stßhn∞te.

Jednou z prov∞°en²ch mo╛nostφ je pou╛φt MySQL a jeho ODBC ovladaΦe pro Windows a synchronizace databßzφ. Steve Lawrence pφ╣e:

  • Nainstalujte si na svou platformu MySQL podle p°ilo╛en²ch instrukcφ. Nejnov∞j╣φ verzi zφskßte na www.mysql.com (stahujte z nejbli╛╣φho zrcadla!). Nenφ t°eba ╛ßdnß zvlß╣tnφ konfigurace krom∞ toho, ╛e kdy╛ instalujete databßzi a konfigurujete u╛ivatelsk² ·Φet, m∞li byste do pole "host" p°idat % nebo nßzev poΦφtaΦe s Windows, na kterΘm chcete MySQL spou╣t∞t. Poznamenejte si nßzev serveru, u╛ivatelskΘ jmΘno a heslo.

  • Stßhn∞te si ovladaΦ MyODBC pro Windows ze strßnek MySQL. Nejnov∞j╣φ verze je myodbc-2_50_19-win95.zip (k dispozici takΘ verze pro NT, stejn∞ tak i zdrojov² k≤d). Nainstalujte ho na poΦφtaΦ s Windows. Funkci m∙╛ete otestovat pomocφ p°ilo╛en²ch utilit.

  • Vytvo°te u╛ivatelsk² nebo systΘmov² dsn v administrßtoru ODBC, umφst∞nΘm v ovlßdacφch panelech. Zvolte nßzev dsn, vlo╛te nßzev poΦφtaΦe, heslo, port apod. pro databßzi MySQL nakonfigurovanou v kroku 1.

  • Nainstalujte plnou instalaci Accessu, co╛ zajistφ, ╛e budou k dispozici v╣echny dopl≥ky; budete pot°ebovat alespo≥ podporu ODBC a sprßvu propojen²ch tabulek.

  • A te∩ to nejzßbavn∞j╣φ! Vytvo°te novou databßzi v Accessu. Klikn∞te prav²m tlaΦφtkem v okn∞ tabulek a vyberte "Propojit tabulky", nebo pod nabφdkou "Soubor" vyberte "NaΦφst externφ data" a potom "Propojit tabulky". A╛ se otev°e dialog, vyberte soubory typu ODBC. Zvolte systΘmov² dsn a nßzev dsn vytvo°enΘho v kroku 3. Vyberte tabulku k propojenφ, stiskn∞te "OK" a je to"! Nynφ m∙╛ete otev°φt tabulku a p°idat/smazat/upravovat data na va╣em MySQL serveru! M∙╛ete takΘ vytvß°et dotazy, importovat/exportovat tabulky do MySQL, vytvß°et formulß°e a sestavy atd.

Tipy a triky:

  • M∙╛ete vytvo°it tabulky v Accessu, exportovat je do MySQL a potom propojit zp∞t. To urychluje nßvrh tabulek.

  • Kdy╛ vytvß°φte tabulky v Accessu, musφte mφt definovßn primßrnφ klφΦ kv∙li zßpisu do tabulky. Ujist∞te se, ╛e jste primßrnφ klφΦ v MySQL vytvo°ili p°ed propojenφm do Accessu.

  • Pokud zm∞nφte tabulku v MySQL, musφte ji znovu p°ipojit do Accessu. Go to tools>add-ins>linked table manager, cruise to your ODBC DSN, and select the table to re-link from there. you can also move your dsn source around there, just hit the always prompt for new location checkbox before pressing ok.

3. Upgradoval jsem na PHP 4 a MySQL mi te∩ hlßsφ "Warning: MySQL: Unable to save result set in ...". Co se d∞je?

Nejspφ╣e se stalo to, ╛e bylo PHP 4 zkompilovßno s volbout '--with-mysql' bez specifikace cesty k MySQL. To znamenß, ╛e PHP pou╛φvß svoji vestav∞nou klientskou knihovnu. Pokud na va╣em systΘmu b∞╛φ aplikace jako PHP 3 (jako paraleln∞ b∞╛φcφ modul Apache) nebo auth-mysql, pou╛φvß jinΘ verze klient∙ MySQL, a je zde tedy konflikt dvou r∙zn²ch verzφ t∞chto klient∙.

P°ekompilovßnφ PHP 4 s p°idßnφm cesty k MySQL do parametru, '--with-mysql=/your/path/to/mysql', obvykle tento problΘm vy°e╣φ.

4. Po instalaci podpory sdφlenΘho MySQL havaruje Apache v moment∞, kdy naΦφtß libphp4.so. Lze to vy°e╣it?

To se stßvß, kdy╛ jsou knihovny MySQL p°ipojovßny s pou╛itφm pthreads. Ov∞°te to pou╛itφm "ldd". Pokud tomu tak je, stßhn∞te si balφk MySQL a zkompilujte zdrojovΘ soubory, nebo p°ekompilujte soubory z RPM balφku a odstra≥te p°epφnaΦ, kter² zapφnß threadov² k≤d klienta. Jeden z t∞chto zp∙sob∙ by m∞l problΘm vy°e╣it. Potom p°ekompilujte PHP s nov²mi knihovnami MySQL.

5. ProΦ dostßvßm chybu, kterß vypadß n∞jak takto: "Warning: 0 is not a MySQL result index in <file> on line <x>" nebo "Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>?

Pokou╣φte se pou╛φt indentifikßtor v²sledku, kter² je 0. Nula indikuje, ╛e vß╣ dotaz z n∞jakΘho d∙vodu selhal. Po odeslßnφ dotazu musφte provΘst kontrolu na chyby, d°φv ne╛ se pokusφte pou╛φt vrßcen² indentifikßtor v²sledku. Sprßvn² zp∙sob, jak to ud∞lat, je popsßn nßsledujφcφm k≤dem:
$result = mysql_query("SELECT * FROM tables_priv");
if (!$result) {
    echo mysql_error();
    exit;
}
or
$result = mysql_query("SELECT * FROM tables_priv")
    or die("Bad query: ".mysql_error());