Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 5346

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>数据库问题</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="PHP 手册"
HREF="index.html"><LINK
REL="UP"
TITLE="FAQ:常见问题"
HREF="faq.html"><LINK
REL="PREVIOUS"
TITLE="获取 PHP"
HREF="faq.obtaining.html"><LINK
REL="NEXT"
TITLE="安装常见问题"
HREF="faq.installation.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="chapter"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>PHP 手册</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="faq.obtaining.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="faq.installation.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="faq.databases"
>章 52. 数据库问题</A
></H1
><P
>&#13;   本节包括 PHP 和数据库之间关系的常见问题。是的,PHP 事实上可以访问如今现有的任何数据库。
  </P
><DIV
CLASS="qandaset"
><DL
><DT
>1. <A
HREF="faq.databases.html#faq.databases.mssql"
>&#13;      听说 PHP 有可能访问 Microsoft SQL Server,怎样访问?
     </A
></DT
><DT
>2. <A
HREF="faq.databases.html#faq.databases.access"
>能访问 Microsoft Access 数据库吗?</A
></DT
><DT
>3. <A
HREF="faq.databases.html#faq.databases.upgraded"
>&#13;      我升级到了 PHP 4,结果 MySQL 不断报告“Warning: MySQL:
      Unable to save result set in ..”,这是怎么回事?
     </A
></DT
><DT
>4. <A
HREF="faq.databases.html#faq.databases.mysql.php5"
>&#13;      PHP 5 不再绑定 MySQL
      客户端库,这对我意味着什么?我还能在 PHP 中使用 MySQL 吗?我试着使用
      MySQL 结果得到“function undefined”错误,怎么办?
     </A
></DT
><DT
>5. <A
HREF="faq.databases.html#faq.databases.shared-mysql"
>&#13;      在安装共享 MySQL 支持之后,只要一加载 libphp4.so,Apache就会
      core dump。这个问题能解决吗?
     </A
></DT
><DT
>6. <A
HREF="faq.databases.html#faq.databases.mysqlresource"
>&#13;      为什么我得到类似如下的错误:“Warning: 0 is not a MySQL result index in &#60;file&#62;
      on line &#60;x&#62;”或者“Warning: Supplied argument is not a valid MySQL result resource
      in &#60;file&#62; on line &#60;x&#62;”?
     </A
></DT
></DL
><DIV
CLASS="qandaentry"
><B
><DIV
CLASS="question"
><P
><A
NAME="faq.databases.mssql"
></A
><B
>1. </B
>
      听说 PHP 有可能访问 Microsoft SQL Server,怎样访问?
     </P
></DIV
></B
><DIV
CLASS="answer"
><P
><B
> </B
>
      在 Windows 机器中,可以简单地使用内置的 ODBC 支持和正确的 ODBC 驱动程序。
     </P
><P
>&#13;      在 Unix 机器中,可以用 Sybase-CT 驱动程序来访问 Microsoft SQL
      Server,因为它们的协议是(至少大部分)兼容的。Sybase 做了一个
      <A
HREF="http://www.php.net/extra/ctlib-linux-elf.tar.gz"
TARGET="_top"
>Linux 系统下所需库的免费版本</A
>。对于其它 Unix
      操作系统,需要和 Sybase 联系来得到正确的库。同样也看看下一个问题的回答。
     </P
></DIV
></DIV
><DIV
CLASS="qandaentry"
><B
><DIV
CLASS="question"
><P
><A
NAME="faq.databases.access"
></A
><B
>2. </B
>能访问 Microsoft Access 数据库吗?</P
></DIV
></B
><DIV
CLASS="answer"
><P
><B
> </B
>
      可以。如果完全在 Windows 9x/Me/NT/2000 下运行,那已经有了所有所需的工具,可以用
      ODBC 和 Microsoft's ODBC drivers for Microsoft Access database。
     </P
><P
>&#13;      如果在 Unix 下运行 PHP 而想访问 Windows 中的 MS Access,那需要 Unix ODBC
      驱动程序。<A
HREF="http://www.openlinksw.com/"
TARGET="_top"
>OpenLink Software</A
> 有一个基于 Unix
      的 ODBC 驱动程序可以做这件事。
     </P
><P
>&#13;      另外一个替代方案是用带 Windows ODBC 驱动的 SQL Server 并用它来储存数据,可以通过
      Microsoft Access(用 ODBC)和 PHP(用内置驱动)来访问,或者用一个 Access 和 PHP
      都识别的中间文件格式,例如 flat 文件或者 dBase 数据库。关于这一点 OpenLink Software
      的 Tim Hayes 写道:
      <A
NAME="AEN288074"
></A
><BLOCKQUOTE
CLASS="BLOCKQUOTE"
><P
>&#13;        当可以通过 ODBC 直接从 PHP 访问数据库时――例如用 OpenLink
        的驱动程序,使用其它数据库做中间媒介不是一个好主意。如果确实需要一个中间文件格式,OpenLink
        已经发布了对应于 Windows NT,Linux 和其它
        Unix 平台的 Virtuoso(一个虚拟数据库引擎)。请访问我们的<A
HREF="http://www.openlinksw.com/"
TARGET="_top"
>网站</A
>来免费下载。
       </P
></BLOCKQUOTE
>
     </P
><P
>&#13;      还有一个已被证实有效的选择是在 Windows 下用 MySQL 和它的 MyODBC
      驱动来同步数据库。Steve Lawrence 写道:
     </P
><P
>&#13;      <P
></P
><UL
><LI
><P
>&#13;         根据 MySQL 的说明在你的平台上安装 MySQL。可以从
         <A
HREF="http://www.mysql.com/"
TARGET="_top"
>http://www.mysql.com/</A
>
         得到最新版。除了设定数据库和配置用户帐号以外不需要特殊的配置,应该在
         host 字段中放一个 % 或者要用来访问 MySQL 的 Windows
         机器名。记下自己的服务器名,用户名和密码。
        </P
></LI
><LI
><P
>&#13;         从 MySQL 网站下载 MyODBC for Windows 驱动程序。在你的
         Windows 机器中安装它。可以用此程序中包括的工具来测试其操作。
        </P
></LI
><LI
><P
>&#13;         用控制面板中的 ODBC 管理器新建一个用户或系统 dsn,设定 dsn
         名称,输入你在第一步中配置的 MySQL
         数据库的主机名,用户名,密码,端口等。
        </P
></LI
><LI
><P
>&#13;         完整安装 Access,这样可以确保得到适当的插件 ... 至少需要
         ODBC 支持和连接表管理器。
        </P
></LI
><LI
><P
>&#13;         新建一个 Access 数据库。在 Table 窗口点击右键并选择 Link Tables,或者在
         File 菜单下选择 Get External Data -&#62; Link
         Tables。当文件浏览窗口打开后,选择文件类型为:ODBC。接着选择
         System dsn 以及在第三步建立的 dsn 的名字。再选择要连接的表,点击
         OK。现在你可以在你的 MySQL
         服务器中打开表并新建/删除/编辑数据了!也可以构造查询,导入/导出表到
         MySQL,构造表单和报告等。
        </P
></LI
></UL
>
     </P
><P
>&#13;      提示与技巧:
      <P
></P
><UL
><LI
><P
>&#13;         可以在 Access 中构造表并导出到 MySQL
         中,再把它们连接回来。这样可以使表的建立更快。
        </P
></LI
><LI
><P
>&#13;         在 Access 中建立表时,必需定义一个基本键名来取得表的写权限。确认在把表连接到
         Access 之前在 MySQL 中建立了基本键名。
        </P
></LI
><LI
><P
>&#13;         如果在 MySQL 中修改了表,必须重新连接到 Access。打开
         Tools&#62;Add-ins&#62;Linked table manager,找到你的
         ODBC DSN,然后在这里选择要重新连接的表。也可以在这里移动
         dsn 源,在点击 OK 之前选中 always prompt for new location。
        </P
></LI
></UL
>
     </P
></DIV
></DIV
><DIV
CLASS="qandaentry"
><B
><DIV
CLASS="question"
><P
><A
NAME="faq.databases.upgraded"
></A
><B
>3. </B
>
      我升级到了 PHP 4,结果 MySQL 不断报告“Warning: MySQL:
      Unable to save result set in ..”,这是怎么回事?
     </P
></DIV
></B
><DIV
CLASS="answer"
><P
><B
> </B
>
      看上去最有可能的是,PHP 4 在编译时使用了
      <CODE
CLASS="option"
>--with-mysql</CODE
> 选项但没有指定
      MySQL 的路径。这意味着 PHP 使用了它自己内置的
      MySQL 客户端库。如果你的系统运行了使用其它版本的
      MySQL 客户端库的应用程序,例如作为 Apache 模块的
      PHP 3,那么在两个不同版本的客户端之间有冲突。
     </P
><P
>&#13;      重新编译 PHP 4,并在标记中加上 MySQL 的路径“<A
HREF="ref.mysql.html#mysql.configure"
>--with-mysql=/your/path/to/mysql</A
>”通常会解决此问题。
     </P
></DIV
></DIV
><DIV
CLASS="qandaentry"
><B
><DIV
CLASS="question"
><P
><A
NAME="faq.databases.mysql.php5"
></A
><B
>4. </B
>
      PHP 5 不再绑定 MySQL
      客户端库,这对我意味着什么?我还能在 PHP 中使用 MySQL 吗?我试着使用
      MySQL 结果得到“function undefined”错误,怎么办?
     </P
></DIV
></B
><DIV
CLASS="answer"
><P
><B
> </B
>
      是的。PHP 总是支持 MySQL 的,不是这种方法就是那种方法。在
      PHP 5 中唯一的改变就是不再绑定客户端库本身了。部分原因是(无特定顺序):
     </P
><P
></P
><UL
><LI
><P
>&#13;        现今大多数系统已经安装了客户端库了。
       </P
></LI
><LI
><P
>&#13;        由于以上原因,保持多个版本的库文件会导致混乱。例如,如果把
        mod_auth_mysql 连接到某个版本,但把 PHP 连接到了另一个版本,然后在
        Apache 中同时激活了它们,会得到无数错误。此外,绑定的库文件也不总是能和服务器端的版本很好地配合。对此最明显的症状是上哪里去找
        UNIX 域套接字文件 mysql.socket。
       </P
></LI
><LI
><P
>&#13;        维护有些松懈,并且已经越来越落后于发行的版本了。
       </P
></LI
><LI
><P
>&#13;        未来的库版本是基于 GPL 的,因此我们没有升级的途径了,因为我们不能将基于
        GPL 的库和 BSD/Apache 风格许可证的项目绑定到一起。因此具有一个干净的
        PHP 5 是最好的选择。
       </P
></LI
></UL
><P
>&#13;      事实上这并不会影响到太多人。UNIX
      用户,起码是那些知道自己在做什么的人,往往会在编译
      PHP 时通过 <CODE
CLASS="option"
>--with-mysql=/usr</CODE
>
      将其绑定到自己系统中的
      libmyqlclient 库上。Windows 用户可以在 <TT
CLASS="filename"
>php.ini</TT
>
      中激活 <TT
CLASS="filename"
>php_mysql.dll</TT
> 扩展库。更多细节见
      <A
HREF="ref.mysql.html"
>MySQL 函数</A
>中的安装指南。此外,确认
      <TT
CLASS="filename"
>libmysql.dll</TT
> 在系统路径中。具体怎样做的详情,请阅读
      FAQ 中的<A
HREF="faq.installation.html#faq.installation.addtopath"
>设定 Windows
      系统路径</A
>。因为 <TT
CLASS="filename"
>libmysql.dll</TT
>(以及很多其它
      PHP 有关文件)存放于 PHP 目录中,可能需要将 PHP 目录加入到系统路径中。
     </P
></DIV
></DIV
><DIV
CLASS="qandaentry"
><B
><DIV
CLASS="question"
><P
><A
NAME="faq.databases.shared-mysql"
></A
><B
>5. </B
>
      在安装共享 MySQL 支持之后,只要一加载 libphp4.so,Apache就会
      core dump。这个问题能解决吗?
     </P
></DIV
></B
><DIV
CLASS="answer"
><P
><B
> </B
>
      如果你的 MySQL 库依靠 pthreads 连接就会这样。检查是否使用了 ldd。如果有的话,下载
      MySQL 源程序编译,或者从源 rpm
      的 spec 文件中去掉打开 threaded client
      的选项然后重新编译。以上任一建议会解决此问题。然后再加上新的
      MySQL 库重新编译 PHP。
     </P
></DIV
></DIV
><DIV
CLASS="qandaentry"
><B
><DIV
CLASS="question"
><P
><A
NAME="faq.databases.mysqlresource"
></A
><B
>6. </B
>
      为什么我得到类似如下的错误:“Warning: 0 is not a MySQL result index in &#60;file&#62;
      on line &#60;x&#62;”或者“Warning: Supplied argument is not a valid MySQL result resource
      in &#60;file&#62; on line &#60;x&#62;”?
     </P
></DIV
></B
><DIV
CLASS="answer"
><P
><B
> </B
>
      你试图用一个值为 0 的结果资源号。0 表示你的查询由于某原因失败了,需要在提交查询之后和在使用返回结果资源号之前检查错误。正确的方法是用类似如下的代码:
      <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /><br />$result </font><font color="#007700">= </font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT * FROM tables_priv"</font><font color="#007700">);<br />if (!</font><font color="#0000BB">$result</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">mysql_error</font><font color="#007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
>
      或者
      <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /><br />$result </font><font color="#007700">= </font><font color="#0000BB">mysql_query</font><font color="#007700">(</font><font color="#DD0000">"SELECT * FROM tables_priv"</font><font color="#007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;or die(</font><font color="#DD0000">"Bad query: " </font><font color="#007700">. </font><font color="#0000BB">mysql_error</font><font color="#007700">());<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
>
     </P
></DIV
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="faq.obtaining.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>起始页</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="faq.installation.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>获取 PHP</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="faq.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>安装常见问题</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>