Jak zkompilovat PHP modul pro 602SQL
Tento dokument popisuje, jak zkompilovat PHP modul pro 602SQL. Pokud hledáte už sestavený PHP modul, podívejte se na stránky http://www.software602.cz. Naleznete je také na stránkách http://winbase.software602.cz.
Soubory PHP modulu
Budete potřebovat následující soubory, měly by být dodány spolu s tímto dokumentem:
název souboru | popis souboru |
readme.html | popis kompilace PHP modulu (tento soubor) |
mod602sql.c mod602sql.h php_602sql.h | zdrojové texty PHP modulu |
mod602sql.rc | informace o verzi, které se připojují k sestavené dynamické knihovně (.dll) (pouze pro Windows) |
php_602sql.mak | makefile pro Windows |
php_602sql.lmk | makefile pro Linux |
602sql8/Makefile.in | soubor, ze kterého skript configure vytvoří Makefile (pouze pro Linux) - pro 602SQL 8.x |
602sql8/config.m4 | soubor, který použije skript buildconf (pouze pro Linux) - pro 602SQL 8.x |
602sql8/CREDITS | soubor, který obsahuje název PHP modulu a jméno autora (pouze pro Linux) - pro 602SQL 8.x |
602sql9/Makefile.in | soubor, ze kterého skript configure vytvoří Makefile (pouze pro Linux) - pro 602SQL 9.0 |
602sql9/config.m4 | soubor, který použije skript buildconf (pouze pro Linux) - pro 602SQL 9.0 |
602sql9/CREDITS | soubor, který obsahuje název PHP modulu a jméno autora (pouze pro Linux) - pro 602SQL 9.0 |
602sql95/Makefile.in | soubor, ze kterého skript configure vytvoří Makefile (pouze pro Linux) - pro 602SQL 9.5 |
602sql95/config.m4 | soubor, který použije skript buildconf (pouze pro Linux) - pro 602SQL 9.5 |
602sql95/CREDITS | soubor, který obsahuje název PHP modulu a jméno autora (pouze pro Linux) - pro 602SQL 9.5 |
602sql10/Makefile.in | soubor, ze kterého skript configure vytvoří Makefile (pouze pro Linux) - pro 602SQL 10.0 |
602sql10/config.m4 | soubor, který použije skript buildconf (pouze pro Linux) - pro 602SQL 10.0 |
602sql10/CREDITS | soubor, který obsahuje název PHP modulu a jméno autora (pouze pro Linux) - pro 602SQL 10.0 |
Další potřebné soubory a programy
- 602SQL verze 8, 8.1, 9.0, 9.5, nebo 10.0
- Musí být nainstalován na počítači, na kterém budete kompilovat PHP modul.
- 602SQL Extension Pack verze 8, nebo 8.1
- Je potřeba pro sestavení PHP modulu pro 602SQL verze 8, resp. 8.1. Obsahuje soubory potřebné pro sestavení aplikací, které spolupracují s 602SQL. Potřebujete hlavičkové soubory wbkernel.h, general.h (jsou součástí SDK pro C/C++) a pro sestavení PHP modulu pro Windows také knihovny 602krnl8.lib a 602prez8.lib.
- Podpora pro C/C++ pro 602SQL 9.0, 9.5, nebo 10.0
- Je potřeba pro sestavení PHP modulu pro 602SQL verze 9.0, 9.5, resp. 10.0. Obsahuje soubory potřebné pro sestavení aplikací napsaných v jazyku C/C++, které spolupracují s 602SQL. Potřebujete hlavičkové soubory wbkernel.h, general.h a pro sestavení PHP modulu pro Windows také knihovnu 602krnl9.lib (resp. 602krnl95.lib, resp. 602krnl10.lib).
- PHP verze 4, nebo verze 5
- Musí být nainstalováno na počítači, na kterém budete kompilovat PHP modul včetně nástrojů pro vývoj modulů (hlavičkové soubory, na Windows také knihovna php4ts.lib).
Při kompilování modulu pro Windows budete potřebovat zdrojové texty PHP (obsahují např. hlavičkové soubory, které se includují do modulu) a také binární distribuci PHP pro Win32 (obsahuje knihovnu php4ts.lib, resp. php5ts.lib; alternativně můžete sami sestavit PHP pro Windows ze zdrojových textů).
- Microsoft Visual C++ verze 6
- Pomocí něj sestavíte PHP modul pro Windows.
- gcc, make
- Pomocí těchto nástrojů sestavíte PHP modul pro Linux.
Sestavení modulu pro Windows
-
Soubory PHP modulu zkopírujte do prázdného adresáře (nechť to je c:\php_602sql).
-
V souboru c:\php_602sql\php_602sql.mak změňte následující údaje:
název nastavení | popis nastavení |
PHPVER | číslo verze PHP, pro které budete modul sestavovat |
PHPSRCDIR | adresář se zdrojovými texty PHP |
PHPLIBDIR | adresář s knihovnou php4ts.lib |
SQL602INCDIR | adresář s hlavičkovými soubory 602SQL (wbkernel.h, general.h) tyto soubory jsou součástí 602SQL Extension Packu (pro 602SQL verze 8.x), resp. Podpory pro C/C++ (pro 602SQL 9.x, či 10.0) |
SQL602LIBDIR | adresář s knihovnami 602krnl8.lib a 602prez8.lib (pro 602SQL 8.x - součástí Extension Packu), resp. adresář s knihovnou 602krnl9.lib (pro 602SQL 9.0 - součást Podpory pro C/C++), resp. s knihovnou 602krnl95.lib (pro 602SQL 9.5), resp. s knihovnou 602krnl10.lib (pro 602SQL 10.0) |
SQLVERMAJ | číslo verze 602SQL, pro kterou chcete sestavit PHP modul: 8 pro 602SQL 8.x 9 pro 602SQL 9.0 95 pro 602SQL 9.5 10 pro 602SQL 10.0 |
-
PHP modul zkompilujte příkazy
C:
cd \php_602sql
nmake -f php_602sql.mak
PHP modul bude sestaven do souboru c:\php_602sql\php_602sql8.dll, nebo c:\php_602sql\php_602sql9.dll, nebo c:\php_602sql\php_602sql95.dll, nebo c:\php_602sql\php_602sql10.dll, podle zvoleného hlavního čísla verze 602SQL.
Sestavení modulu pro Linux
Modul lze sestavit buď v rámci kompilace PHP, nebo samostatně. Pokud si PHP kompilujete, pak vždy sestavujte 602SQL modul v rámci kompilace PHP. Samostatné sestavení modulu zvolte, pokud máte PHP nainstalováno z binárního RPM balíčku. Pro samostatné sestavení modulu musíte mít také nainstalován balíček php-devel stejné verze, jaká je verze balíčku php. Samostatným sestavením modulu získáte vždy dynamicky nahrávaný modul php_602sql8.so (resp. php_602sql9.so, či php_602sql95.so, či php_602sql10.so - podle verze 602SQL, pro kterou PHP modul sestavujete), zatímco kompilací modulu v rámci kompilace PHP můžete modul 602SQL zakompilovat do PHP.
Sestavení modulu v rámci kompilace PHP je připraveno a odzkoušeno s PHP 4.2.x, PHP 4.3.x a s PHP 5.0.x, s jinými verzemi PHP se to nemusí podařit (např. proto, že v config.m4 se používají makra, která jsou definována až v PHP 4.2.x). Při sestavování modulu s PHP 4.1.x upravte v textovém editoru soubor config.m4 podle pokynů, které jsou v něm uvedeny.
Sestavení modulu v rámci kompilace PHP:
- Do podadresáře 602sql v podadresáři ext adresáře se zdrojovými texty PHP (nechť to je /usr/src/php-4.2.3/ext/602sql) zkopírujte následující soubory PHP modulu: mod602sql.c, mod602sql.h, php_602sql.h. K nim přikopírujte trojici souborů config.m4, CREDITS a Makefile.in, které naleznete v podadresáři 602sql8, resp. 602sql9, resp. 602sql95, resp. 602sql10, podle toho, pro kterou verzi 602SQL chcete PHP modul sestavit. Soubory v podadresáři 602sql8 jsou určeny pro 602SQL 8.0, nebo 8.1, soubory v podadresáři 602sql9 jsou určeny pro 602SQL 9.0, v podadresáři 602sql95 pro 602SQL 9.5 a v podadresáři 602sql10 pro 602SQL 10.0.
- Po zkopírování souborů spusťte skript buildconf (tedy /usr/src/php-4.2.3/buildconf), který zahrne nově přidaný podadresář adresáře ext do systému sestavování PHP.
- Při konfiguraci kompilace PHP zadejte jako jeden z parametrů skriptu configure --with-602sql. Tvarem tohoto parametru je ovlivněno, zda modul bude staticky slinkován s PHP (bude jeho nedílnou součástí), nebo zda bude sestaven dynamicky nahrávaný modul php_602sql8.so, resp. php_602sql9.so, resp. php_602sql95.so, resp. php_602sql10.so. Dále se tímto parametrem nastavuje, kde se budou hledat hlavičkové soubory a knihovny 602SQL serveru. Hlavičkové soubory 602SQL jsou součástí Extension Packu (pro 602SQL 8.x), resp. součástí Podpory pro C/C++ (pro 602SQL 9.x, či 10.0). Lze je stáhnout na http://www.602.cz. Následující tabulka obsahuje možné tvary tohoto parametru a jejich význam.
tvar parametru | význam |
--with-602sql |
modul bude zakompilován do PHP (bude jeho nedílnou součástí, tj. ani nebude vytvářena dynamická knihovna php_602sql8.so, resp. php_602sql9.so)
hlavičkové soubory 602SQL 8.x se budou hledat v adresáři /usr/local/include/602sql8 nebo v adresáři /usr/include/602sql8, resp. hlavičkové soubory 602SQL 9.0 se budou hledat v adresáři /usr/local/include/602sql9 nebo v adresáři /usr/include/602sql9, resp. hlavičkové soubory 602SQL 9.5 se budou hledat v adresáři /usr/local/include/602sql95 nebo v adresáři /usr/include/602sql95, resp. hlavičkové soubory 602SQL 10.0 se budou hledat v adresáři /usr/local/include/602sql10 nebo v adresáři /usr/include/602sql10
knihovna libwb602.so 602SQL 8.x se bude hledat v adresáři /usr/local/lib/602sql8 nebo v adresáři /usr/lib/602sql8, resp. knihovna lib602krnl9.so 602SQL 9.0 se bude hledat v adresáři /usr/local/lib/602sql9 nebo v adresáři /usr/lib/602sql9, resp. knihovna lib602krnl95.so 602SQL 9.5 se bude hledat v adresáři /usr/local/lib/602sql95 nebo v adresáři /usr/lib/602sql95, resp. knihovna lib602krnl10.so 602SQL 10.0 se bude hledat v adresáři /usr/local/lib/602sql10 nebo v adresáři /usr/lib/602sql10
|
--with-602sql=shared |
modul bude sestaven jako dynamicky nahrávaný modul php_602sql8.so, resp. php_602sql9.so, resp. php_602sql95.so, resp. php_602sql10.so v adresáři /usr/src/php-4.2.3/modules
hlavičkové soubory 602SQL 8.x se budou hledat v adresáři /usr/local/include/602sql8 nebo v adresáři /usr/include/602sql8, resp. hlavičkové soubory 602SQL 9.0 se budou hledat v adresáři /usr/local/include/602sql9 nebo v adresáři /usr/include/602sql9, resp. hlavičkové soubory 602SQL 9.5 se budou hledat v adresáři /usr/local/include/602sql95 nebo v adresáři /usr/include/602sql95, resp. hlavičkové soubory 602SQL 10.0 se budou hledat v adresáři /usr/local/include/602sql10 nebo v adresáři /usr/include/602sql10
knihovna libwb602.so 602SQL 8.x se bude hledat v adresáři /usr/local/lib/602sql8 nebo v adresáři /usr/lib/602sql8, resp. knihovna lib602krnl9.so 602SQL 9.0 se bude hledat v adresáři /usr/local/lib/602sql9 nebo v adresáři /usr/lib/602sql9, resp. knihovna lib602krnl95.so 602SQL 9.5 se bude hledat v adresáři /usr/local/lib/602sql95 nebo v adresáři /usr/lib/602sql95, resp. knihovna lib602krnl10.so 602SQL 10.0 se bude hledat v adresáři /usr/local/lib/602sql10 nebo v adresáři /usr/lib/602sql10
|
--with-602sql=/cesta |
modul bude zakompilován do PHP (bude jeho nedílnou součástí, tj. ani nebude vytvářena dynamická knihovna php_602sql8.so, resp. php_602sql9.so, resp. php_602sql95.so)
hlavičkové soubory 602SQL 8.x se budou hledat v adresáři /cesta/include/602sql8, resp. hlavičkové soubory 602SQL 9.0 se budou hledat v adresáři /cesta/include/602sql9, resp. hlavičkové soubory 602SQL 9.5 se budou hledat v adresáři /cesta/include/602sql95, resp. hlavičkové soubory 602SQL 10.0 se budou hledat v adresáři /cesta/include/602sql10
knihovna libwb602.so 602SQL 8.x se bude hledat v adresáři /cesta/lib/602sql8, resp. knihovna lib602krnl9.so 602SQL 9.0 se bude hledat v adresáři /cesta/lib/602sql9, resp. knihovna lib602krnl95.so 602SQL 9.5 se bude hledat v adresáři /cesta/lib/602sql95, resp. knihovna lib602krnl10.so 602SQL 10.0 se bude hledat v adresáři /cesta/lib/602sql10
|
--with-602sql=shared,/cesta |
modul bude sestaven jako dynamicky nahrávaný modul php_602sql8.so, resp. php_602sql9.so, resp. php_602sql95.so v adresáři /usr/src/php-4.2.3/modules
hlavičkové soubory 602SQL 8.x se budou hledat v adresáři /cesta/include/602sql8, resp. hlavičkové soubory 602SQL 9.0 se budou hledat v adresáři /cesta/include/602sql9, resp. hlavičkové soubory 602SQL 9.5 se budou hledat v adresáři /cesta/include/602sql95, resp. hlavičkové soubory 602SQL 10.0 se budou hledat v adresáři /cesta/include/602sql10
knihovna libwb602.so 602SQL 8.x se bude hledat v adresáři /cesta/lib/602sql8, resp. knihovna lib602krnl9.so 602SQL 9.0 se bude hledat v adresáři /cesta/lib/602sql9, resp. knihovna lib602krnl95.so 602SQL 9.5 se bude hledat v adresáři /cesta/lib/602sql95, resp. knihovna lib602krnl10.so 602SQL 10.0 se bude hledat v adresáři /cesta/lib/602sql10
|
- Zkompilujte PHP, v rámci této kompilace bude zkompilován i 602SQL modul.
Sestavení modulu samostatnou kompilací:
- Rozbalte soubory PHP modulu do nějakého adresáře (nechť je to /usr/src/php_602sql).
- V souboru /usr/src/php_602sql/php_602sql.lmk upravte následující parametry:
název parametru | význam parametru |
phpincdir | adresář s hlavičkovými soubory PHP (obsahuje mj. podadresáře main, TSRM a Zend) |
phpmoddir | adresář s dynamicky nahrávanými PHP moduly (je uveden v php.ini v klíči extension_dir) |
sql602incdir | adresář s hlavičkovými soubory 602SQL (obsahuje mj. soubory wbkernel.h a general.h) Hlavičkové soubory 602SQL jsou součástí Extension Packu (pro 602SQL 8.x), resp. součástí Podpory pro C/C++ (pro 602SQL 9.x). Lze je stáhnout na http://www.602.cz. |
sql602libdir | adresář s dynamickými knihovnami 602SQL (obsahuje mj. knihovnu libwb602.so v případě 602SQL 8.x, respektive lib602krnl9.so v případě 602SQL 9.0, resp. lib602krnl95.so v případě 602SQL 9.5, resp. lib602krnl10.so v případě 602SQL 10.0) knihovny jsou obvykle v adresáři /usr/lib/602sql8, resp. /usr/lib/602sql9, resp. /usr/lib/602sql95, resp. /usr/lib/602sql10, a jsou součástí standardní instalace 602SQL pro Linux |
sql602vermaj | číslo verze 602SQL, pro kterou chcete sestavit PHP modul (viz popis uvedený v php_602sql.lmk) |
- Modul zkompilujte příkazem
cd /usr/src/php_602sql
make -f php_602sql.lmk
Verze PHP modulu a seznam změn od vydání 602SQL 8.0
PHP modul php_602sql (resp. php_wb602) se čísluje takto: první dvě číslice v čísle verze jsou číslo verze 602SQL (resp. WinBase602), pro kterou je daný PHP modul určen. Tyto číslice se mění pouze tehdy, když je vydána novější "velká" verze 602SQL. Třetí číslice je vždy nula. Čtvrtá číslice je číslo sestavení PHP modulu a tato číslice se mění při každém vydání novějšího PHP modulu.
PHP moduly php_602sql verze (např.) 8.0.0.16 a php_wb602 verze 7.0.0.16 jsou z hlediska funkčnosti totožné (pouze s tím rozdílem, že php_wb602 nemá implementovány rysy, které nejsou implementovány ve WinBase602 7.0 - např. podporu pro čtení a zápis UNICODE řetězců), pouze je jeden určen pro 602SQL 8.0 a druhý pro WinBase602 7.0.
Aktuální verze je 11.0.0.37 (pro 602SQL 11.0). Ze zdrojových textů lze zkompilovat modul také pro 602SQL 8.0, 8.1, 9.0, 9.5 a 10.0 a pro WinBase602 7.0.
změny ve verzi 11.0.0.37 (3.3.2011)
- upraveno čtení hodnot výstupních klientských proměnných SQL příkazů prováděných pomocí funkce wb_exec, v PHP 5.3 se změnilo chování jádra PHP (PHP funkce (resp. její implementace v jazyku C) nemá implicitně vytvořenu hash tabulku s PHP proměnnými, které jsou na aktuálním místě PHP skriptu dostupné - viz [PHP-DEV] [PATCH] Lazy symbol table initialization), kvůli tomu mohlo docházet k pádu PHP modulu; nyní je chování PHP modulu upraveno tak, aby vše fungovalo
změny ve verzi 11.0.0.36 (30.7.2008, aktualizace 27.1.2009, další aktualizace 9.3.2009)
- PHP modul umí pracovat s novými typy sloupců EXTCLOB a EXTBLOB.
- opravena chyba v PHP modulu pro Linux, kvůli které z něj nešel používat XSD parser (pro instalaci XSL-FO formulářů do databáze)
- opravena chyba v prepared SQL příkazech, pokud byl v prepared SQL příkazu OUT parametr, který byl nastaven na NULL v SQL, tak do PHP se nepřenesla NULL hodnota, ale náhodná hodnota
změny ve verzi 11.0.0.35 (3.1.2008)
- Opravena chyba ve funkci wb_export_to_xml_buffer, pokud byl výsledný XML datový dokument delší než 4096 znaků, tak mohlo být na jeho konec přidáno několik náhodných znaků. Nyní je to opraveno.
změny ve verzi 11.0.0.35 (27.8.2007)
- Opraveno přihlašování na SQL server ve verzích nižších než 9.5. V těchto verzích se v wb_connect zjišťovalo systémové kódování databáze, ale tato vlastnost byla do 602SQL přidána až ve verzi 9.5. Kvůli tomu, pokud bylo zároveň nastaveno kódování PHP skriptu různé od WB_ENC_UNKNOWN (viz funkce wb_set_script_encoding), tak funkce wb_connect vždy skončila s chybou.
- Názvy klientských proměnných ve zdrojovém textu SQL příkazu, který je předáván funkci wb_exec, musí být uvedeny těsně za dvojtečkou, resp. za znaky <, či >. Dříve mohl být mezi dvojtečkou a názvem proměnné, resp. mezi dvojtečkou a znaky < a > a názvem proměnné, libovolný počet mezer.
změny ve verzi 11.0.0.35 (2.8.2007)
- Opraveno čtení hodnot výstupních parametrů typů CLOB, nebo BLOB, které jsou delší než cca 59000 bajtů, pomocí psql funkcí. Dříve se přečetlo pouze prvních cca 59000 bajtů, nyní se přečte správně celá hodnota (resp. požadovaný úsek hodnoty - viz funkce wb_psql_get_out_param()).
- modul upraven pro 602SQL verze 11
změny ve verzi 10.0.0.34
- Opraveno čtení sloupců typu CLOB v režimu WB_PASSTHRU (viz popis funkce wb_result, resp. wb_binmode. Dříve mohlo dojít k tomu, že se na výstup vypsalo pouze prvních 4096 bajtů z hodnoty sloupce. Nyní se vypíše celá hodnota.
- Přidány funkce wb_odbc_connect a wb_odbc_disconnect. Otevírají, resp. uzavírají spojení na ODBC zdroje dat. Otevřené ODBC zdroje dat lze využít při importu a exportu dat v XML formátu a ve funkci wb_data_transport. Podrobnosti viz nápověda.
změny ve verzi 10.0.0.33
- přidána funkce wb_escape_string, která vrátí escape podobu řetězce, který dostala jako parametr - viz nápověda
- modul upraven pro 602SQL verze 10
- modul pro 602SQL verze 10 a vyšší se umí připojit na 602SQL servery nižších verzí (verze serveru musí být alespoň 8.1) a pracovat s nimi; se servery nižších verzí komunikuje výhradně přes síťové rozhraní, proto je nutné spustit SQL server s aktivovaným síťovým rozhraním (i kdyby běžel SQL server a PHP modul na tom samém počítači)
- přidána funkce wb_set_client_error_callback, lze pomocí ní zaznamenávat chyby, které nastanou v klientské knihovně 602SQL (pro 602SQL verze aspoň 10)
- Funkce pro import a export XML dat mohou nyní pracovat také s ODBC zdroji dat. Místo parametru typu otevřené spojení na 602SQL databázi mohou dostat pole, v němž jsou popsány parametry spojení na ODBC zdroj dat. Pole musí obsahovat prvek s indexem 'dsn', v němž je název ODBC zdroje dat. Dále pole může obsahovat prvky s indexem 'uid' a 'pwd', v nichž jsou uživatelské jméno a heslo, které se má použít při připojení k ODBC zdroji dat.
- nová funkce wb_get_xml_form, umí spojit XML-FO form (nebo XML-ZFO form) s XML daty, viz. nápověda
- Opraveno čtení sloupců typu CLOB z otevřených kurzorů v módu WB_LOBMODE_DIRECT a s nastaveným nenulovým údajem wb_longreadlen. Dříve se přečetla úvodní část hodnoty sloupce o jeden znak kratší, než byla délka nastavená funkcí wb_longreadlen. Nyní se přečte celý požadovaný počáteční úsek hodnoty sloupce.
změny ve verzi 9.5.0.32
- přidány funkce wb_xsdp_XXX pro práci s XSD parserem (pro 602SQL od verze 10)
- přidána funkce wb_get_xml_response (pro 602SQL od verze 10)
změny ve verzi 9.5.0.31
- přidána funkce wb_set_script_encoding, pomocí které se nastavuje kódování prováděného PHP skriptu (pro 602SQL 9.0 a novější); PHP modul potom automaticky konvertuje řetězce znaků mezi kódovou stránkou PHP skriptu a systémovou kódovou stránkou databáze; podrobný popis je v Nápovědě k 602SQL
- přidána funkce wb_script_encoding, vrací aktuální kódovu stránku PHP skriptu (pro 602SQL 9.0 a novější)
- opravena funkce wb_fetch_into, když v LOB módu WB_LOBMODE_RESOURCE se do výstupního parametru typu pole ukládal resource typu LOB, bylo jej možno použít pouze v jednom volání některé funkce, která manipuluje s LOBy, protože pak byl automaticky uzavřen; nyní lze resource používat, dokud není explicitně uzavřen, resp. dokud existuje proměnná, která na něj odkazuje
- opravena chyba ve funkci wb_lob_read; pokud se touto funkcí četla hodnota ze sloupce typu BLOB, docházelo k přepsání malé části paměti a kvůli tomu většinou k pádu PHP; nyní funkce pracuje správně
- opravena chyba při čtení CLOBů, která mohla někdy způsobit pád PHP, především při čtení CLOBů v módu WB_PASSTHRU
- upraven význam parametru wb_longreadlen: pokud je -1, pak bude v módu WB_LOBMODE_DIRECT přečtena celá hodnota sloupce proměnné délky; dříve se v tomto případě nepřečetlo nic
- opravena funkce wb_lob_write, hlásila neopodstatněnou chybu při zápisu řetězce v kódování UTF-8 do sloupce typu BLOB; nyní bude řetězec do BLOBu zapsán
- v prepared SQL příkazech lze nyní používat parametry typu BLOB jako IN parametry
změny ve verzi 9.5.0.30
- opravena chyba ve funkci wb_exec, když provedení SQL příkazu vyvolalo chybu, funkce vracela NULL; nyní vrací FALSE, jak je uvedeno v nápovědě
- po připojení k SQL serveru se nastaví progress report modulus na 0
- přidána funkce wb_get_realm, která vrací realm používaný při HTTP autentifikaci k SQL serveru (pro 602SQL 9.5 a novější)
- přidána funkce wb_get_xml_response, je to obdoba funkce get_xml_response z 602SQL API (pro 602SQL 9.5 a novější)
změny ve verzi 9.5.0.29
- nová funkce wb_err_num, vrací číslo poslední chyby
- nová funkce wb_data_transport, je PHP verzí funkce cd_Data_transport z 602SQL API pro jazyk C; popis funkce je v nápovědě
- nová funkce wb_select_db, která umožňuje pro dané spojení (connection) změnit aplikaci (schéma)
změny ve verzi 9.5.0.28
- modul lze zkompilovat pro 602SQL 9.5
- upravena funkce wb_field_type, nyní pro scaled integers vrací řetězec "NUMERIC", dříve vracela název integer typu, na kterém byl scaled integer založen
změny ve verzi 9.0.0.27
- nová funkce wb_field_num, zjistí číslo sloupce, jehož jméno dostane jako parametr; její popis je uveden v nápovědě
- funkce wb_field_type a wb_field_type_num mohou dostat jako druhý parametr jméno sloupce, jehož typ se má zjistit; viz nápověda
- opraveno padání PHP modulu, ke kterému mohlo dojít, když se četla hodnota OUT parametru typu CLOB prepared SQL příkazu (pomocí funkce wb_psql_get_out_param), jejíž délka byla větší než 256 bajtů
- Opravena chyba ve funkci wb_lob_read. Funkce vracela delší řetězec, než byl v LOBu, když parametry size a offset byly nastaveny tak, aby se přečetlo více dat, než kolik jich LOB ve skutečnosti obsahoval (např. CLOB obsahoval 20 znaků, ale funkce se volala takto wb_lob_read($lob,0,30);). Funkce nyní vrátí pouze data, která jsou v LOBu.
- Opraveno padání PHP modulu, které mohlo nastávat na některých počítačích v případě, že se spojení na SQL server explicitně uzavřelo funkcí wb_close a zároveň existoval otevřený kurzor, který využíval toto spojení, a otevřený LOB, který využíval tento otevřený kurzor.
změny ve verzi 9.0.0.26
- opravena chyba ve funkci wb_result_all, kvůli které se NULL hodnoty typu DATE a TIMESTAMP zobrazovaly jako "Thu Jan 01 1970", resp. "Thu Jan 01 1970 01:00:00"; nyní se zobrazí prázdný řetězec
- funkce wb_psql_send_param ignorovala hodnoty parametrů value_offset a value_size a vždy odesílala SQL serveru celou hodnotu parametru; nyní se odesílá pouze požadovaná část hodnoty parametru
- upraveno chování funkce wb_result_all v případě, že vypisuje hodnoty typu BOOLEAN; TRUE nyní vypíše jako "TRUE", FALSE jako "FALSE" a NULL jako prázdný řetězec
- upraveno chování funkce wb_result_all v případě, že vypisuje hodnoty typu DATE a TIMESTAMP, které nejsou validním datumem, resp. timestampem; nyní vypíše "[invalid DATE]", resp. "[invalid TIMESTAMP]"
změny ve verzi 9.0.0.25
- opravena chyba při čtení hodnoty sloupce typu NCLOB pomocí funkce wb_lob_read() (hodnoty ostatních typů se četly správně); hodnota sloupce se přečetla špatně, s nesmyslnými znaky na konci přečtené části a přečetla se jiná část hodnoty sloupce, než ta, určená pomocí parametrů funkce wb_lob_read(); nyní se přečte určená část hodnoty sloupce a přečte se správně
- nebylo možno používat funkci wb_psql_out_param_count, protože ji PHP modul neposkytoval k použití v PHP skriptech; nyní ji už lze používat
- při pokusu o stornování dosud odeslaných hodnot IN parametrů prepared SQL příkazů pomocí funkce wb_psql_drop_params byla vždy zobrazena chyba "602SQL: can't drop parameters because none was sent to SQL server"; nyní tato funkce pracuje správně
změny ve verzi 9.0.0.24
- nové funkce pro XML import a export wb_export_to_xml, wb_export_to_xml_buffer, wb_import_from_xml a wb_import_from_xml_buffer, jejich popis je uveden v nápovědě
změny ve verzi 9.0.0.23
- na Windows upravena konverze hodnot typu DATE a TIMESTAMP při jejich čtení z databáze: na některých Windows byly tyto údaje přečteny do PHP s jednohodinovým, resp. jednodením posunem, nyní i na těchto systémech se hodnoty přečtou správně
- změněn význam IN parametrů prepared SQL příkazů typu DATE a TIMESTAMP v případě, že jsou zadány jako integer čísla (tj. jako Unix timestampy): dříve bylo nutno zadávat Unix timestampy v UTC, nyní je nutno je zadávat v lokálním čase - blíže viz nápověda k prepared SQL příkazům, resp. popis parametrů prepared SQL příkazů
- opraveno padání PHP modulu při čtení hodnoty OUT parametru typu NCHAR(n), resp. NCLOB, prepared SQL příkazů, jehož hodnota je delší než 256 bajtů
- opraveno čtení OUT a INOUT parametrů typu NCHAR(n), resp. NCLOB, prepared SQL příkazů, jejichž hodnota je delší než 256 bajtu; přečetla se pouze část hodnoty parametrů, nyní se přečte celá hodnota
změny ve verzi 9.0.0.22
- kompilace PHP modulu a popisy upraveny také pro 602SQL 9.0
- doplněno čtení hodnot přesných číselných typů s desetinnou částí (tj. typů NUMERIC(N,M), kde M je různé od nuly, které jsou reprezentovány fyzickým datovým typem jedno, dvou, čtyř, nebo osmi-bajtové číslo) (pouze pro 602SQL 9.0)
- doplněna manipulace s hodnotami PSQL parametrů přesných číselných typů s desetinnou částí, tj. odesílání hodnot IN parametrů na server a čtení hodnot OUT parametrů ze serveru (pouze pro 602SQL 9.0)
změny ve verzi 8.1.0.22
- funkce pro konverzi stringů mezi kódováním UTF-8 a UCS-2 nahrazeny jinými
- množina kódování, které lze nastavit funkcí wb_set_client_encoding, byla rozšířena o kódování WB_ENC_ASCII, WB_ENC_ISO_8859_2, WB_ENC_WIN1250 a WB_ENC_WIN1252 - viz popis funkce wb_set_client_encoding v nápovědě
- Opravena chybné čtení hodnoty sloupce typu BLOB, resp. BINARY v případě, že byl nastaven mód wb_binmode na WB_CONVERT. Za binární hodnotu zkonvertovanou do hexadecimálního zápisu se chybně přidával jeden znak s ASCII hodnotou 0. Tato chyba byla odstraněna.
- Opraveno uzavírání spojení na SQL server funkcí wb_close v případě, že v době volání této funkce existuje aspoň jeden otevřený kurzor, nebo prepared SQL příkaz, nebo LOB resource, který byl vytvořen pomocí tohoto spojení na SQL server. Dříve se (správně) ohlásilo varování "Attempt to close a connection which is being used.", ale poté se ohlásila nesmyslná chyba "602SQL error in Close_cursor: in Unknown on line 0". Toto nesmyslné hlášení je nyní odstraněno
změny ve verzi 8.1.0.21
- opraveno padání PHP modulu při pokusu o předání IN parametru typu DATE, TIME, nebo TIMESTAMP prepared SQL příkazu
- opravena chyba ve funkci wb_fetch_into: Pokud byla tato funkce volána se třemi parametry (tj. včetně čísla záznamu, který má být přečten), funkce nezměnila interní číslo aktuálního záznamu. Kvůli tomu pak v následujícím volání některé funkce, která čte záznamy z kurzoru, byl přečten nesprávný záznam.
změny ve verzi 8.1.0.20
- Opravena chyba, která znemožňovala přečtení NULL stringu jako hodnoty OUT parametru SQL příkazu provedeného PSQL funkcemi.
- Opraveno chybné přečtení hodnoty OUT parametru typu NCHAR, nebo NCLOB SQL příkazu provedeného PSQL funkcemi. Spolu se skutečnou hodnotou parametru se přečetly také náhodné znaky.
- Opraveno čtení hodnot OUT parametrů SQL příkazů provedených PSQL funkcemi. Vždy se četla hodnota prvního OUT parametru, tj. nebylo možno přečíst hodnoty dalších OUT parametrů.
- Modul lze zkompilovat s PHP 5.0.0RC1.
-
Za následujících okolností mohlo být nesprávně vyhodnoceno, že otevřený kurzor neobsahuje žádný záznam, i když nějaké záznamy měl obsahovat:
- kurzor byl otevřen pomocí wb_psql_execute, přitom prepared SQL příkaz obsahoval alespoň jeden parametr
- a zároveň před provedením jakékoliv operace s kurzorem byl prepared SQL příkaz buď uzavřen pomocí wb_close, nebo byl pomocí wb_psql_execute z tohoto prepared SQL příkazu otevřen další kurzor
Nyní je zajištěno, že i v tomto případě se kurzor správně vyhodnotí.
- Opraveno čtení prázdné hodnoty typu NCLOB z otevřeného kurzoru. Pokus o čtení takové hodnoty skončil s chybou "řetězec nelze zkonvertovat do UTF-8", nyní se správně přečte prázdný řetězec.
změny ve verzi 8.1.0.19
- zcela nová sada funkcí wb_psql_XXX pro manipulaci s prepared SQL příkazy - viz jejich popis v nápovědě
- informace o verzi PHP modulu jsou k dispozici prostřednictvím čtyř konstant typu int, a to PHP_602SQL_VERSION_MAJOR, PHP_602SQL_VERSION_MINOR, PHP_602SQL_VERSION_PATCH a PHP_602SQL_VERSION_PATCH2
změny ve verzi 8.1.0.18
- první verze určená také pro 602SQL 8.1
- opraveno padání modulu, pokud se používala funkce wb_close k zavírání otevřených kurzorů
změny ve verzi 8.0.0.17
- opravena chyba, kvůli které občas nebyly do seznamu host variables, který se s SQL příkazem předává SQL serveru, přidány některé proměnné, které byly použity v SQL příkazu
změny ve verzi 8.0.0.16
- zdrojový text modulu byl upraven, aby jej bylo možno zkompilovat s aktuální vývojovou verzí PHP 5
Nové funkce pro manipulaci s BLOBy a CLOBy. Tyto funkce slouží pro čtení a aktualizaci LOBů. Vytváření nových LOBů není podporováno (tj. je nutno nejdříve SQL příkazem INSERT vytvořit nový záznam, který obsahuje LOB (případně do něj uložit nějakou počáteční hodnotu), a poté vyhodnotit SQL příkaz SELECT, který vybere tento nový záznam, a z něj už lze otevřít LOB, číst jej a měnit jeho hodnotu).
boolean wb_set_lob_mode(resource cursor, integer new_lob_mode)
nastaví mód čtení LOBů pro kurzor cursor, možné hodnoty new_lob_mode jsou: WB_LOBMODE_DIRECT - LOBy budou čteny jako doposud (tj. budou přečtena data, přičemž jejich čtení bude ovlivněno nastavením wb_binmode a wb_longreadlen), nebo WB_LOBMODE_RESOURCE - při čtení LOBů budou otevřeny resourcy, pomocí nichž lze s LOBy manipulovat
toto nastavení platí jak pro čtení LOBů pomocí wb_result, tak pro čtení pomocí wb_fetch_into
default nastavení platné pro každý nově otevřený kurzor je WB_LOBMODE_DIRECT
vrátí TRUE při úspěchu, FALSE při chybě
string wb_lob_read(resource lob, integer offset, integer size)
přečte a vrátí úsek LOBu lob od offset (první bajt LOBu má offset=0) o velikosti size, offset je začátek čteného úseku ve znacích, size je velikost ve znacích
v případě CLOBu vrátí text obsažený ve CLOBu
v případě NCLOBu vrátí text zkonvertovaný do UTF-8
v případě BLOBu vrátí binární řetězec
v případě chyby vrátí FALSE, a to i v případě pokusu o čtení za koncem LOBu
Co jsou znaky:
pro CLOBy to jsou 8-bitové ASCII znaky
pro NCLOBy to jsou 16-bitové UCS-2 znaky
pro BLOBy to jsou 8-bitové binární znaky
integer wb_lob_length(resource lob)
vrátí délku LOBu lob ve znacích (co jsou znaky viz popis wb_lob_read)
boolean wb_lob_write(resource lob, integer offset, integer size, string data)
zapíše size znaků z data do lob od pozice offset (první znak má offset=0), offset je místo, odkud se začnou data zapisovat, size je velikost ve znacích (pokud je size==0, pak se zapíše celý obsah stringu data; tuto volbu není rozumné používat pro BLOBy)
při zápisu do NCLOBu, pokud je client_encoding==WB_ENC_UTF8, zkonvertuje data z UTF-8 do UCS-2 a zapíše je do databáze
vrátí TRUE při úspěchu, FALSE při chybě
zapisovat lze pouze do těch LOBů, které byly otevřeny v editovatelném kurzoru, v případě pokusu o zápis do needitovatelného kurzoru se ohlásí chyba
Co jsou znaky:
v případě offsetu to záleží na typu LOBu: pro CLOB a BLOB to jsou 8-bitové znaky, pro NCLOB to jsou 16-bitové znaky
v případě size to záleží na nastavení client_encoding: pro WB_ENC_ASCII to jsou 8-bitové znaky, pro WB_ENC_UTF8 to jsou UTF-8 znaky (tj. s proměnnou velikostí)
boolean wb_lob_close(resource lob)
boolean wb_close(resource lob)
zavře resource lob, po provedení této funkce nebude možno s lob provádět žádné operace
pokud nebude lob uzavřen explicitně, bude uzavřen automaticky na konci requestu
Další podrobnosti jsou uvedeny v Nápovědě k 602SQL.
změny ve verzi 8.0.0.15
kompletně zpřístupněna podpora 602SQL pro vícejazyčné aplikace pomocí těchto nových funkcí:
boolean wb_select_language(resource connection,int language_id) resp. bool wb_select_language(resource connection,string language_name) - pomocí ní se vybírá aktuální jazyk
int wb_get_selected_language_id(resource connection) - vrací ID aktuálního jazyka
string wb_get_selected_language_name(resource connection) - vrací název aktuálního jazyka
array wb_get_languages(resource connection) - vrací seznam jazyků, které jsou definovány pro vybranou 602SQL aplikaci
string wb_metastring(resource connection,string metastring) - vrátí text v aktuálním vybraném jazyku metařetězce předaného jako parametr
- opraveny chyby v připojování k 602SQL pomocí funkce wb_pconnect, nekorektně se uvolňovala paměť a mohlo docházet k pádům PHP modulu (spojení vytvořená funkcí wb_connect nebyla těmito chybami ovlivněna)
změny ve verzi 8.0.0.14
dodělána podpora čtení sloupců typu NCHAR (tj. UNICODE string pevné délky) a NCLOB (tj. text proměnné délky v UNICODE):
602SQL vnitřně ukládá UNICODE stringy v kódování UCS-2, PHP snáze pracuje s UNICODE stringy v kódování UTF-8, proto PHP modul po přečtení hodnoty ze sloupce typu UNICODE string (resp. UNICODE text) překóduje tuto hodnotu do UTF-8 a překódovanou hodnotu poskytne PHP skriptu. V případě průběžného výstupu hodnoty typu NCLOB do sestavované stránky (tj. pokud je wb_binmode=WB_PASSTHRU pro daný otevřený kurzor) se do sestavované stránky vloží hodnota v kódování UTF-8.
Ještě je nutno dodat, že údaj v INI wb_longreadlen, resp. nastavení tohoto údaje pro daný otevřený kurzor, udává velikost hodnoty proměnné délky, která bude přečtena z databáze, v bajtech, ne ve znacích, což je podstatné právě pro UNICODE texty. Z nich bude přečteno prvních wb_longreadlen/2 znaků, protože v kódování UCS-2 každý znak zabírá dva bajty.
Do databáze lze ukládat texty, které jsou v kódování UTF-8, protože byla vytvořena nová funkce wb_set_client_encoding, kterou skript sděluje PHP modulu, v jakém kódování jsou texty v PHP proměnných, které skript předává do SQL příkazu. Pomocí funkce wb_client_encoding lze zjistit aktuálně nastavené kódování klientských proměnných s textem.
změny ve verzi 8.0.0.13
- nová funkce wb_field_type, která vrátí název SQL typu sloupce, jehož číslo je předáno v parametru
- nová funkce wb_field_type_num, která vrátí číslo SQL typu sloupce (jednu z konstant ATT_XXX), jehož číslo je předáno v parametru
- nové číselné konstanty ATT_XXX představující čísla SQL typů
- opraveno chybné čtení hodnot host vars typu BOOLEAN (ATT_BOOLEAN), místo FALSE se často přečetlo TRUE (čtení db. sloupců typu BOOLEAN bylo bez chyby, tato chyba se týkala pouze host variables)
změny ve verzi 8.0.0.12
- opraveno padání modulu při provádění funkce wb_connect, resp. wb_pconnect, pokud se v parametrech nepředával název aplikace, nebo jméno uživatele
změny ve verzi 8.0.0.11
- při vytváření persistentních spojení na SQL server pomocí wb_pconnect se nekontrolovala hodnota parametru wb_allow_persistent
změny ve verzi 8.0.0.10
- upraveny zdrojové soubory a Makefile.in a přidán soubor config.m4 tak, aby bylo možno modul kompilovat na Linuxu v rámci kompilace celého PHP
změny ve verzi 8.0.0.9
- nová funkce wb_pconnect pro vytvoření persistentního spojení na 602SQL server
- nové parametry v php.ini:
název parametru | standardní hodnota parametru | kým lze změnit | význam parametru |
wb_max_links | -1 | PHP_INI_SYSTEM | maximální počet současně otevřených spojení na SQL server (včetně persistentních spojení) pokud je -1, pak počet spojení není omezen |
wb_max_persistent | -1 | PHP_INI_SYSTEM | maximální počet současně otevřených persistentních spojení na SQL server pokud je -1, pak počet persistentních spojení není omezen |
wb_allow_persistent | 1 | PHP_INI_SYSTEM | 0 znamená, že nelze vytvářet persistentní spojení; 1 znamená, že je povoleno používání persistentních spojení |
Další informace
Popis PHP funkcí, které jsou v PHP modulu implementovány, je uveden v elektronické dokumentaci k 602SQL (Rozhraní pro přístup na SQL server -> Modul PHP).
Instalace PHP modulu do PHP je popsána tamtéž.
Podrobnější informace o 602SQL a o PHP modulu pro 602SQL lze nalézt na stránkách http://www.software602.cz/602sql/.