PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Instalace> <Získání PHP
Last updated: Sat, 24 Mar 2007

view this page in

Kapitola 52. 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.

52.1. Slyšel jsem, že lze z PHP přistupovat k Microsoft SQL Serveru. Jak?
52.2. Lze přistupovat k databázím Microsoft Access?
52.3. Upgradoval jsem na PHP 4 a MySQL mi teď hlásí "Warning: MySQL: Unable to save result set in ...". Co se děje?
52.4. Po instalaci podpory sdíleného MySQL havaruje Apache v momentě, kdy načítá libphp4.so. Lze to vyřešit?
52.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>?
52.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.

52.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.

52.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ší.

52.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.

52.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());



Instalace> <Získání PHP
Last updated: Sat, 24 Mar 2007
 
add a note add a note User Contributed Notes
Záležitosti databází
kalle dot kipina at gmail dot com
09-Aug-2007 05:06
As reply to the entry from 20-Mar-2005 01:19:

The trick seems to be to insert the php directory into your path before any of the other libmysql.dll locations.
cantelow at csd dot net
30-Aug-2006 10:48
On Tru64 5.1A, we had what looked like the mysql pthread problem, with php 5 shared lib compiling fine but crashing upon firing up apache.  But, our problem turned out to be this: we were running 2 versions of mysql and attempting to use --with-mysql=/usr/local/newmysql5 to link to our running test mysql5 distribution.  php was still linking against an old /usr/local/lib/mysql mysqlclient library, however (or setting up to use old /usr/local/lib/mysql shared mysqlclient.so, not sure which).

When we made sure that only /usr/local/newmysql5/lib/mysql/ mysqlclient library (which was a static one in our case) was available to our compiling user, our problem with php crashing on apache start went away. (We used tru64's handy setacl command to accomplish this.)  We still have the mysql5 pthread-included compile.
Kaleabtesfaye at hotmail dot com
13-Apr-2006 12:56
If Some1 is intersted on PHP with MS Access
here is some code
<?php

$db
= 'C:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb';

$conn = new COM('ADODB.Connection') //or exit('Cannot start ADO.');

// Two ways to connect. Choose one.
$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db") or exit('Cannot open with Jet.');
//$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db") //or exit('Cannot open with driver.');

$sql = 'SELECT   Table Field1,feild2...
    FROM     db
    ORDER BY Field'
;
$rs = $conn->Execute($sql);

?>

Enjoy
Addis Ababa,
Ethiopia
jstoner at NOSPAM dot opsource dot net
01-Mar-2006 01:56
Building in a Redhat 4 64-bit environment:

This assumes you're using Redhat's RPMs (mysql, mysql-devel).

MySQL libraries get installed in /usr/lib64 but PHP only searches /usr/lib. This means your config will fail. You need to create a fake install of MySQL in another directory to get PHP to build correctly.

Create another directory, say /usr/local/mysql. Then cd into that directory and create 2 symbolic links pointing to the appropriate include directory and lib directory:

# mkdir /usr/local/mysql
# cd /usr/local/mysql
# ln -s /usr/include/mysql include
# ln -s /usr/lib64/mysql lib

Now, you should be able to configure PHP with "--with-mysql=/usr/local/mysql" and build properly.
James Coburn
01-Feb-2006 05:31
An easy way to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/

: simply install mysql-devel from mysql site.
plandis98 at yahoo dot com
18-Dec-2005 10:46
If one is using PHP on Windows to connection to MS SQL Server and does not want to pass credentials via the mssql_connect but instead use MS Connectionless NT Authentication, what is the proper syntax/usage? 

I believe you want to turn on secure_connection in php.ini file:
; Use NT authentication when connecting to the server
mssql.secure_connection = On
djlopez at gmx dot de
08-Sep-2005 05:51
How to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/

If you want to use mysql 4.0 (*not* 4.1 or even higher!) just download & extract the latest mysql4.0 binary distribution to e.g.
/root/mysql40/

but don't start it (it even should not work, if you have a mysql server already running)

Then use --with-mysql=/root/mysql4 within your php5 configuration.

After compiling/installing (make, make install), you may delete the /root/mysql40/ directory, or keep it for later versions of php5.
20-Mar-2005 01:19
Just a quick note which may help Windows users setting up PHP/Apache/MySQL.  I was receiving these two error messages on Apache startup: 1) "The procedure entry point mysql_thread_end could not be located in the dynamic link library LIBMYSQL.dll" and 2) "PHP Startup: Unable to load dynamic library '<my php installation dir>/ext/php_mysql.dll' - The specified procedure could not be found".  After checking that libmysql.dll did exist in my root PHP install dir, and that this dir was in my path, I determined that the problem was an older version of libmysql.dll.  My solution was to search all harddrives for this file (I found 6 copies of 5 different versions), and rename all of them except my PHP install dir copy.  PHP, Apache and MySQL all function as expected after making this change.
knb at gfz-potsdam dot de
11-Oct-2004 02:53
This is a crucial piece of information for SYBASE users:

If you are using the free, but old, 11.x client libs from sybase,
 then compile with option  "--with-sybase-ct=$SYBASE"
substitute $SYBASE with the appropriate directory name.

option --with-sybase (without ct) can somehow be used to talk to old MS-SQL servers, but only with the 11.x client libs.

If you are using free, or have legally obtained, 12.x client libs from sybase, then compile with option  "--with-sybase-ct=$SYBASE/$SYBASE_OCS"
substitute $SYBASE/$SYBASE_OCS with the appropriate directory name.
Simon
04-Nov-2003 04:38
You can connect to Microsoft SQL Server from PHP without using ODBC. It's even detailed in the PHP docs! Wow! You can find the details at http://www.php.net/manual/en/ref.mssql.php
jastern at uci dot edu
26-Sep-2002 02:24
i made some notes of trials/tribulations setting up PHP (on a linux redhat 7.3 box) to connect (via interbase/ODBC client libraries) to an interbase server on another machine:

http://www.faqts.com/knowledge_base/view.phtml/aid/18951/fid/679

hope it helps someone..
michal at tuxy dot org
26-Feb-2002 11:22
You can approch problem with mysql and pthread by recompiling/linking apache (1.3.2x) with pthread library instead of removing pthread from mysql. This solved my problem with apache dumping core with php (3.0.18 and php 4.1.1) and mysql.
You can use ldd to check if apache is compiled with pthreads.
Hope that helps.

Instalace> <Získání PHP
Last updated: Sat, 24 Mar 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites