svn: /phpdoc/zh/trunk/faq/ databases.xml
[email protected] (YuQiang Yuan) Fri, 26 Jul 2019 04:55:11 +0000
| Newsgroups | php.doc.zh |
|---|---|
| Message-ID | <[email protected]> |
yuanyuqiang Fri, 26 Jul 2019 04:55:11 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=347800
Log:
update to new en version
Changed paths:
U phpdoc/zh/trunk/faq/databases.xml
svn-diffs-347800.txt
(text/x-diff, 16.9 KB)
Modified: phpdoc/zh/trunk/faq/databases.xml
===================================================================
--- phpdoc/zh/trunk/faq/databases.xml 2019-07-25 16:58:04 UTC (rev 347799)
+++ phpdoc/zh/trunk/faq/databases.xml 2019-07-26 04:55:11 UTC (rev 347800)
@@ -1,119 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
+<!-- EN-Revision: 340962 Maintainer: yuanyuqiang Status: ready -->
<!-- $Revision$ -->
-<!-- $Author$ -->
-<!-- $EN-Revision: 340962 $ -->
-<chapter xml:id="faq.databases"
- xmlns="http://docbook.org/ns/docbook"
- xmlns:xlink="http://www.w3.org/1999/xlink">
- <title>数据库问题</title>
- <titleabbrev>数据库问题</titleabbrev>
- <para>本节包括 PHP 和数据库之间关系的常见问题。是的,PHP 事实上可以访问如今现有的任何数据库。</para>
- <qandaset>
- <qandaentry xml:id="faq.databases.mssql">
- <question>
- <para>听说 PHP 有可能访问 Microsoft SQL Server,怎样访问?</para>
- </question>
- <answer>
- <para>在 Windows 机器中,可以简单地使用内置的 ODBC 支持和正确的 ODBC 驱动程序。</para>
- <para>在 Unix 机器中,可以用 Sybase-CT 驱动程序来访问 Microsoft SQL Server,因为它们的协议是(至少大部分)兼容的。Sybase 做了一个
- Linux 系统下所需库的免费版本<!-- Removed link to fix the build ~sobak 12/06/2016 -->。对于其它 Unix 操作系统,需要和 Sybase 联系来得到正确的库。同样也看看下一个问题的回答。</para>
- </answer>
- </qandaentry>
- <qandaentry xml:id="faq.databases.access">
- <question>
- <para>能访问 Microsoft Access 数据库吗?</para>
- </question>
- <answer>
- <para>可以。如果完全在 Windows 9x/Me/NT/2000 下运行,那已经有了所有所需的工具,可以用 ODBC 和 Microsoft's ODBC drivers for Microsoft Access database。</para>
- <para>如果在 Unix 下运行 PHP 而想访问 Windows 中的 MS Access,那需要 Unix ODBC 驱动程序。
- <link xlink:href="&url.openlink;">OpenLink Software</link>有一个基于 Unix 的 ODBC 驱动程序可以做这件事。</para>
- <para>另外一个替代方案是用带 Windows ODBC 驱动的 SQL Server 并用它来储存数据,可以通过 Microsoft Access(用 ODBC)和 PHP(用内置驱动)来访问,或者用一个 Access 和 PHP 都识别的中间文件格式,例如 flat 文件或者 dBase 数据库。关于这一点 OpenLink Software 的 Tim Hayes 写道:
- <blockquote>
- <para>当可以通过 ODBC 直接从 PHP 访问数据库时——例如用 OpenLink 的驱动程序,使用其它数据库做中间媒介不是一个好主意。如果确实需要一个中间文件格式,OpenLink 已经发布了对应于 Windows NT,Linux 和其它 Unix 平台的 Virtuoso(一个虚拟数据库引擎)。请访问我们的
- <link xlink:href="&url.openlink;">网站</link>来免费下载。</para>
- </blockquote></para>
- <para>还有一个已被证实有效的选择是在 Windows 下用 MySQL 和它的 MyODBC 驱动来同步数据库。Steve Lawrence 写道:</para>
- <para>
- <itemizedlist>
- <listitem>
- <simpara>根据 MySQL 的说明在你的平台上安装 MySQL。可以从
- <link xlink:href="&url.mysql;">&url.mysql;</link>得到最新版。除了设定数据库和配置用户帐号以外不需要特殊的配置,应该在 host 字段中放一个 % 或者要用来访问 MySQL 的 Windows 机器名。记下自己的服务器名,用户名和密码。</simpara>
- </listitem>
- <listitem>
- <simpara>从 MySQL 网站下载 MyODBC for Windows 驱动程序。在你的 Windows 机器中安装它。可以用此程序中包括的工具来测试其操作。</simpara>
- </listitem>
- <listitem>
- <simpara>用控制面板中的 ODBC 管理器新建一个用户或系统 dsn,设定 dsn 名称,输入你在第一步中配置的 MySQL 数据库的主机名,用户名,密码,端口等。</simpara>
- </listitem>
- <listitem>
- <simpara>完整安装 Access,这样可以确保得到适当的插件 ... 至少需要 ODBC 支持和连接表管理器。</simpara>
- </listitem>
- <listitem>
- <simpara>新建一个 Access 数据库。在 Table 窗口点击右键并选择 Link Tables,或者在 File 菜单下选择 Get External Data -> Link Tables。当文件浏览窗口打开后,选择文件类型为:ODBC。接着选择 System dsn 以及在第三步建立的 dsn 的名字。再选择要连接的表,点击 OK。现在你可以在你的 MySQL 服务器中打开表并新建/删除/编辑数据了!也可以构造查询,导入/导出表到 MySQL,构造表单和报告等。</simpara>
- </listitem>
- </itemizedlist>
- </para>
- <para>提示与技巧:
- <itemizedlist>
- <listitem>
- <simpara>可以在 Access 中构造表并导出到 MySQL 中,再把它们连接回来。这样可以使表的建立更快。</simpara>
- </listitem>
- <listitem>
- <simpara>在 Access 中建立表时,必需定义一个基本键名来取得表的写权限。确认在把表连接到 Access 之前在 MySQL 中建立了基本键名。</simpara>
- </listitem>
- <listitem>
- <simpara>如果在 MySQL 中修改了表,必须重新连接到 Access。打开 Tools>Add-ins>Linked table manager,找到你的 ODBC DSN,然后在这里选择要重新连接的表。也可以在这里移动 dsn 源,在点击 OK 之前选中 always prompt for new location。</simpara>
- </listitem>
- </itemizedlist></para>
- </answer>
- </qandaentry>
- <qandaentry xml:id="faq.databases.upgraded">
- <question>
- <para>我升级到了 PHP 4,结果 MySQL 不断报告“Warning: MySQL: Unable to save result set in ..”,这是怎么回事?</para>
- </question>
- <answer>
- <para>看上去最有可能的是,PHP 4 在编译时使用了
- <option role="configure">--with-mysql</option>选项但没有指定 MySQL 的路径。这意味着 PHP 使用了它自己内置的 MySQL 客户端库。如果你的系统运行了使用其它版本的 MySQL 客户端库的应用程序,例如作为 Apache 模块的 PHP 3,那么在两个不同版本的客户端之间有冲突。</para>
- <para>重新编译 PHP 4,并在标记中加上 MySQL 的路径“
- <link linkend="mysql.configure">--with-mysql=/your/path/to/mysql</link>”通常会解决此问题。</para>
- </answer>
- </qandaentry>
-
- <qandaentry xml:id="faq.databases.mysql.deprecated">
- <question>
- <para>
- Why is the MySQL extension (ext/mysql) that I've been using for over
- 10 years discouraged from use? Is it deprecated? What do I use instead?
- How can I migrate?
- </para>
- </question>
- <answer>
- <para>
- There are three MySQL extensions, as described under the
- <link linkend="mysqlinfo.api.choosing">Choosing a MySQL API</link> section. The old API
- should not be used, and one day it will be deprecated and eventually removed from PHP.
- It is a popular extension so this will be a slow process, but you are strongly encouraged
- to write all new code with either <link linkend="book.mysqli">mysqli</link> or
- <link linkend="ref.pdo-mysql">PDO_MySQL</link>.
- </para>
- <para>
- Migration scripts are not available at this time, although the mysqli API contains both
- a procedural and OOP API, with the procedural version being similar to ext/mysql.
- </para>
- <para>
- It is not possible to mix the extensions. So, for example, passing a mysqli connection to
- PDO_MySQL or ext/mysql will not work.
- </para>
- </answer>
- </qandaentry>
- <qandaentry xml:id="faq.databases.mysqlresource">
- <question>
- <para>为什么我得到类似如下的错误:“Warning: 0 is not a MySQL result index in <file> on line <x>”或者“Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>”?</para>
- </question>
- <answer>
- <para>你试图用一个值为 0 的结果资源号。0 表示你的查询由于某原因失败了,需要在提交查询之后和在使用返回结果资源号之前检查错误。正确的方法是用类似如下的代码:
- <programlisting role="php">
- <![CDATA[
+<chapter xml:id="faq.databases" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <title>数据库问题</title>
+ <titleabbrev>数据库问题</titleabbrev>
+ <para>
+ 本节包括 PHP 和数据库之间关系的常见问题。
+ 事实上,
+ PHP 可以访问如今现有的任何数据库。
+ </para>
+
+ <qandaset>
+ <qandaentry xml:id="faq.databases.mssql">
+ <question>
+ <para>
+ 听说 PHP 有可能访问 Microsoft SQL Server,怎样访问?
+ </para>
+ </question>
+ <answer>
+ <para>
+ 在 Unix 机器中,你可以使用 <link linkend="ref.pdo-odbc">PDO_ODBC</link>
+ 或者 <link linkend="book.uodbc">Unified ODBC API</link> 来访问 Microsoft SQL Server 数据库。
+ </para>
+ <para>
+ 在 Windows 机器中,你可以使用 <link linkend="ref.pdo-sqlsrv">PDO_SQLSRV</link>
+ 或 <link linkend="book.sqlsrv">SQLSRV</link> 来访问 Microsoft SQL Server 数据库。
+ </para>
+ <para>
+ 同时,也可以参考下一个问题。
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry xml:id="faq.databases.access">
+ <question>
+ <para>能访问 Microsoft Access 数据库吗?</para>
+ </question>
+ <answer>
+ <para>
+ 可以。如果完全在 Windows 9x/Me/NT/2000 下运行,那已经有了所有所需的工具,
+ 可以用 ODBC
+ 和 Microsoft's ODBC drivers for Microsoft Access database。
+ </para>
+ <para>
+ 如果在 Unix 下运行 PHP 而想访问 Windows 中的 MS Access,
+ 那需要 Unix ODBC 驱动程序。
+ <link xlink:href="&url.openlink;">OpenLink Software</link>
+ 有一个基于 Unix 的 ODBC 驱动程序可以做这件事。
+ </para>
+ <para>
+ 另外一个替代方案是用带 Windows ODBC
+ 驱动的 SQL Server 并用它来储存数据,
+ 可以通过 Microsoft Access(用 ODBC)和 PHP(用内置驱动)来访问,
+ 或者用一个 Access 和 PHP 都识别的中间文件格式,
+ 例如 flat 文件或者 dBase 数据库。
+ 关于这一点 OpenLink Software 的 Tim Hayes 写道:
+ <blockquote>
+ <para>
+ 当可以通过 ODBC 直接从 PHP 访问数据库时——例如用 OpenLink 的驱动程序,
+ 使用其它数据库做中间媒介不是一个好主意。
+ 如果确实需要一个中间文件格式,
+ OpenLink 已经发布了对应于 Windows NT,Linux 和其它 Unix 平台的 Virtuoso(一个虚拟数据库引擎)。
+ 请访问我们的 <link xlink:href="&url.openlink;">网站</link>来免费下载。
+ </para>
+ </blockquote>
+ </para>
+ <para>
+ 还有一个已被证实有效的选择是在 Windows 下用 MySQL
+ 和它的 MyODBC 驱动来同步数据库。
+ Steve Lawrence 写道:
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ 根据 MySQL 的说明在你的平台上安装 MySQL。可以从
+ <link xlink:href="&url.mysql;">&url.mysql;</link>得到最新版。
+ 除了设定数据库和配置用户帐号以外不需要特殊的配置,
+ 应该在 host 字段中放一个 % 或者要用来访问 MySQL 的 Windows 机器名。
+ 记下自己的服务器名,
+ 用户名和密码。
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ 从 MySQL 网站下载 MyODBC for Windows 驱动程序。
+ 在你的 Windows 机器中安装它。
+ 可以用此程序中包括的工具来测试其操作。
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ 用控制面板中的 ODBC 管理器新建一个用户或系统 dsn,
+ 设定 dsn 名称,
+ 输入你在第一步中配置的 MySQL 数据库的主机名,用户名,密码,端口等。
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ 完整安装 Access,
+ 这样可以确保得到适当的插件...
+ 至少需要安装 ODBC 支持和连接表管理器。
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ 新建一个 Access 数据库。
+ 在 Table 窗口点击右键并选择 Link Tables,
+ 或者在 File 菜单下选择 Get External Data -> Link Tables。
+ 当文件浏览窗口打开后,选择文件类型为:ODBC。
+ 接着选择 System dsn 以及在第三步建立的 dsn 的名字。
+ 再选择要连接的表,点击 OK。
+ 现在你可以在你的 MySQL
+ 服务器中打开表并新建/删除/编辑数据了!
+ 也可以构造查询,导入/导出表到 MySQL,构造表单和报告等。
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ 提示与技巧:
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ 可以在 Access 中构造表并导出到 MySQL 中,
+ 再把它们连接回来。
+ 这样可以使表的建立更快。
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ 在 Access 中建立表时,
+ 必需定义一个基本键名来取得表的写权限。
+ 确认在把表连接到 Access 之前在 MySQL
+ 中建立了基本键名。
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ 如果在 MySQL 中修改了表,
+ 必须重新连接到 Access。
+ 打开 Tools>Add-ins>Linked table manager,
+ 找到你的 ODBC DSN,然后在这里选择要重新连接的表。
+ 也可以在这里移动 dsn 源,
+ 在点击 OK 之前选中 “always prompt for new location”。
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry xml:id="faq.databases.mysql.deprecated">
+ <question>
+ <para>
+ 为什么我已经使用了十多年的 MySQL 扩展(ext/mysql)
+ 不建议继续使用了?
+ 它被废弃了吗?我应该选择什么替代方案?如何迁移到新的方案?
+ </para>
+ </question>
+ <answer>
+ <para>
+ 在 <link linkend="mysqlinfo.api.choosing">选择一种 MySQL API</link> 一节中
+ 描述了 3 中 MySQL 扩展。
+ 不应该继续使用旧的 API 了,可能将来的某一天旧 API 就会被废弃甚至从 PHP 中移除。
+ 当然,旧的 API 曾经是非常主流的,很多用户都用了它,所以这个被废弃及移除的过程不会太快。
+ 但是仍然强烈建议使用 <link linkend="book.mysqli">mysqli</link> 或
+ <link linkend="ref.pdo-mysql">PDO_MySQL</link> 来访问 MySQL 数据库。
+ </para>
+ <para>
+ 自动迁移脚本目前还没有。
+ mysqli API 包括了面向过程和面向对象的两种风格的调用方式,并且面向过程的版本中提供的 API 和 ext/mysql 是非常相似的。
+ </para>
+ <para>
+ 不可以同时混合使用这几种 MySQL API。
+ 例如,你不可以把一个 mysqli 的连接资源传入到 PDO_MySQL 或者 ext/mysql 中去使用。
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry xml:id="faq.databases.mysqlresource">
+ <question>
+ <para>
+ 为什么我得到类似如下的错误:
+ “Warning: 0 is not a MySQL result index in <file> on line <x>”
+ 或者
+ “Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>”?
+ </para>
+ </question>
+ <answer>
+ <para>
+ 你试图用一个值为 0 的结果资源号。
+ 0 表示你的查询由于某原因失败了,
+ 需要在提交查询之后
+ 和在使用返回结果资源号之前检查错误。
+ 正确的方法是用类似如下的代码:
+ <programlisting role="php">
+<![CDATA[
<?php
$result = mysql_query("SELECT * FROM tables_priv");
@@ -123,9 +206,10 @@
}
?>
]]>
-</programlisting>或者
- <programlisting role="php">
- <![CDATA[
+ </programlisting>
+ 或者
+ <programlisting role="php">
+<![CDATA[
<?php
$result = mysql_query("SELECT * FROM tables_priv")
@@ -132,11 +216,13 @@
or die("Bad query: " . mysql_error());
?>
]]>
-</programlisting></para>
- </answer>
- </qandaentry>
- </qandaset>
+ </programlisting>
+ </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
</chapter>
+
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml