mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-15 16:38:54 +00:00

git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@64852 c90b9560-bf6c-de11-be94-00142212c4b1
253 lines
9.3 KiB
XML
Executable file
253 lines
9.3 KiB
XML
Executable file
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision: 1.13 $ -->
|
|
<chapter id="faq.databases">
|
|
<title>Database issues</title>
|
|
<titleabbrev>Database issues</titleabbrev>
|
|
|
|
<para>
|
|
This section holds common questions about relation between
|
|
PHP and databases. Yes, PHP can access virtually any
|
|
database available today.
|
|
</para>
|
|
|
|
<qandaset>
|
|
<qandaentry id="faq.databases.mssql">
|
|
<question>
|
|
<para>
|
|
I heard it's possible to access Microsoft SQL Server from PHP. How?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
On Windows machines, you can simply use the included ODBC support
|
|
and the correct ODBC driver.
|
|
</para>
|
|
<para>
|
|
On Unix machines, you can use the Sybase-CT driver
|
|
to access Microsoft SQL Servers because they are (at
|
|
least mostly) protocol-compatible. Sybase has made a
|
|
<ulink url="&faqurl.sybase;">free version of the necessary
|
|
libraries for Linux systems</ulink>. For other Unix operating
|
|
systems, you need to contact Sybase for the correct libraries.
|
|
Also see the answer to the next question.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry id="faq.databases.access">
|
|
<question>
|
|
<para>Can I access Microsoft Access databases?</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Yes. You already have all the tools you need if you are running
|
|
entirely under Windows 9x/Me, or NT/2000, where you can use
|
|
ODBC and Microsoft's ODBC drivers for Microsoft Access databases.
|
|
</para>
|
|
<para>
|
|
If you are running PHP on a Unix box and want to talk to MS Access
|
|
on a Windows box you will need Unix ODBC drivers.
|
|
<ulink url="&faqurl.openlinksw;">OpenLink Software</ulink> has Unix-based
|
|
ODBC drivers that can do this. There is a free pilot program where you
|
|
can download an evaluation copy that doesn't expire and prices start at
|
|
$675 for the commercial supported version.
|
|
</para>
|
|
<para>
|
|
Another alternative is to use an SQL server that has
|
|
Windows ODBC drivers and use that to store the data, which you can
|
|
then access from Microsoft Access (using ODBC) and PHP (using the
|
|
built in drivers), or to use an intermediary file format that Access
|
|
and PHP both understand, such as flat files or dBase databases.
|
|
On this point Tim Hayes from OpenLink software writes:
|
|
<programlisting>
|
|
Using another database as an intermediary is not a good idea, when you can
|
|
use ODBC from PHP straight to your database - i.e. with OpenLink's drivers. If
|
|
you do need to use an intermediary file format, OpenLink have now released
|
|
Virtuoso (a virtual database engine) for NT, Linux and other unix platforms.
|
|
Please visit our <ulink url="&faqurl.openlinksw;">website</ulink> for a free download.
|
|
</programlisting>
|
|
</para>
|
|
<para>
|
|
One option that has proven successful is to use MySQL and its
|
|
MyODBC drivers on Windows and synchronizing the databases. Steve Lawrence
|
|
writes:
|
|
</para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Install MySQL on your platform according to instructions with MySQL.
|
|
Latest available from <ulink url="&faqurl.mysql;">www.mysql.com</ulink>
|
|
(get it from your mirror!). No special
|
|
configuration required except when you set up a database, and configure the
|
|
user account, you should put % in the host field, or the host name of the
|
|
Windows computer you wish to access MySQL with. Make a note of your server
|
|
name, username, and password.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Download the MyODBC for Windows driver from the MySQL site. Latest
|
|
release is myodbc-2_50_19-win95.zip (NT available too, as well as source
|
|
code). Install it on your Windows machine. You can test the operation with
|
|
the utilities included with this program.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Create a user or system dsn in your ODBC administrator, located in the
|
|
control panel. Make up a dsn name, enter your hostname, user name, password,
|
|
port, etc for you MySQL database configured in step 1.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Install Access with a full install, this makes sure you get the proper
|
|
add-ins.. at the least you will need ODBC support and the linked table
|
|
manager.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Now the fun part! Create a new access database. In the table
|
|
window right click and select Link Tables, or under the file
|
|
menu option, select Get External Data and then Link Tables.
|
|
When the file browser box comes up, select files of type: ODBC.
|
|
Select System dsn and the name of your dsn created in step 3.
|
|
Select the table to link, press ok, and presto! You can now
|
|
open the table and add/delete/edit data on your MySQL server!
|
|
You can also build queries, import/export tables to MySQL,
|
|
build forms and reports, etc.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
Tips and Tricks:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
You can construct your tables in access and export them
|
|
to MySQL, then link them back in. That makes table
|
|
creation quick.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
When creating tables in access, you must have a primary
|
|
key defined in order to have write access to the table in
|
|
access. Make sure you create a primary key in MySQL before
|
|
linking in access
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
If you change a table in MySQL, you have to re-link it
|
|
in Access. 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.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry id="faq.databases.upgraded">
|
|
<question>
|
|
<para>
|
|
I upgraded to PHP 4, and now mysql keeps telling me
|
|
"Warning: MySQL: Unable to save result set in ...". What's up?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Most likely what has happened is, PHP 4 was compiled with the '--with-mysql'
|
|
option, without specifying the path to MySQL. This means PHP is using its
|
|
built-in MySQL client library. If your system is running applications,
|
|
such as PHP 3 as a concurrent Apache module, or auth-mysql, that use other
|
|
versions of MySQL clients, then there is a conflict between the two
|
|
differing versions of those clients.
|
|
</para>
|
|
<para>
|
|
Recompiling PHP 4, and adding the path to MySQL to the flag,
|
|
'<link linkend="install.configure.with-mysql">--with-mysql=/your/path/to/mysql</link>'
|
|
usually solves the problem.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry id="faq.databases.shared-mysql">
|
|
<question>
|
|
<para>
|
|
After installing shared MySQL support, Apache dumps core as soon
|
|
as libphp4.so is loaded. Can this be fixed?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
If your MySQL libs are linked against pthreads this will happen. Check
|
|
using ldd. If they are, grab the MySQL tarball and compile from source,
|
|
or recompile from the source rpm and remove the switch in the spec file
|
|
that turns on the threaded client code. Either of these suggestions will
|
|
fix this. Then recompile PHP with the new MySQL libs.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry id="faq.databases.mysqlresource">
|
|
<question>
|
|
<para>
|
|
Why do I get an error that looks something like this:
|
|
"Warning: 0 is not a MySQL result index in <file>
|
|
on line <x>" or "Warning: Supplied argument is not
|
|
a valid MySQL result resource in <file> on line <x>?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
You are trying to use a result identifier that is 0. The 0 indicates
|
|
that your query failed for some reason. You need to check for errors
|
|
after submitting a query and before you attempt to use the returned
|
|
result identifier. The proper way to do this is with code similar
|
|
to the following:
|
|
<programlisting role="php">
|
|
$result = mysql_query("SELECT * FROM tables_priv");
|
|
if (!$result) {
|
|
echo mysql_error();
|
|
exit;
|
|
}
|
|
</programlisting>
|
|
or
|
|
<programlisting role="php">
|
|
$result = mysql_query("SELECT * FROM tables_priv")
|
|
or die("Bad query: ".mysql_error());
|
|
</programlisting>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
</qandaset>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|