©
本文档使用 PHP中文网手册 发布
本节包括 PHP 和数据库之间关系的常见问题。是的,PHP 事实上可以访问如今现有的任何数据库。
在 Windows 机器中,可以简单地使用内置的 ODBC 支持和正确的 ODBC 驱动程序。
在 Unix 机器中,可以用 Sybase-CT 驱动程序来访问 Microsoft SQL Server,因为它们的协议是(至少大部分)兼容的。Sybase 做了一个 » Linux 系统下所需库的免费版本。对于其它 Unix 操作系统,需要和 Sybase 联系来得到正确的库。同样也看看下一个问题的回答。
可以。如果完全在 Windows 9x/Me/NT/2000 下运行,那已经有了所有所需的工具,可以用 ODBC 和 Microsoft's ODBC drivers for Microsoft Access database。
如果在 Unix 下运行 PHP 而想访问 Windows 中的 MS Access,那需要 Unix ODBC 驱动程序。 » OpenLink Software有一个基于 Unix 的 ODBC 驱动程序可以做这件事。
另外一个替代方案是用带 Windows ODBC 驱动的 SQL Server 并用它来储存数据,可以通过 Microsoft Access(用 ODBC)和 PHP(用内置驱动)来访问,或者用一个 Access 和 PHP 都识别的中间文件格式,例如 flat 文件或者 dBase 数据库。关于这一点 OpenLink Software 的 Tim Hayes 写道:
当可以通过 ODBC 直接从 PHP 访问数据库时——例如用 OpenLink 的驱动程序,使用其它数据库做中间媒介不是一个好主意。如果确实需要一个中间文件格式,OpenLink 已经发布了对应于 Windows NT,Linux 和其它 Unix 平台的 Virtuoso(一个虚拟数据库引擎)。请访问我们的 » 网站来免费下载。
还有一个已被证实有效的选择是在 Windows 下用 MySQL 和它的 MyODBC 驱动来同步数据库。Steve Lawrence 写道:
提示与技巧:
看上去最有可能的是,PHP 4 在编译时使用了 --with-mysql 选项但没有指定 MySQL 的路径。这意味着 PHP 使用了它自己内置的 MySQL 客户端库。如果你的系统运行了使用其它版本的 MySQL 客户端库的应用程序,例如作为 Apache 模块的 PHP 3,那么在两个不同版本的客户端之间有冲突。
重新编译 PHP 4,并在标记中加上 MySQL 的路径“ --with-mysql=/your/path/to/mysql”通常会解决此问题。
There are three MySQL extensions, as described under the Choosing a MySQL API 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 mysqli or PDO_MySQL.
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.
It is not possible to mix the extensions. So, for example, passing a mysqli connection to PDO_MySQL or ext/mysql will not work.
是的。PHP 总是支持 MySQL 的,不是这种方法就是那种方法。在 PHP 5 中唯一的改变就是不再绑定客户端库本身了。部分原因是(无特定顺序):
现今大多数系统已经安装了客户端库了。
由于以上原因,保持多个版本的库文件会导致混乱。例如,如果把 mod_auth_mysql 连接到某个版本,但把 PHP 连接到了另一个版本,然后在 Apache 中同时激活了它们,会得到无数错误。此外,绑定的库文件也不总是能和服务器端的版本很好地配合。对此最明显的症状是上哪里去找 UNIX 域套接字文件 mysql.socket。
维护有些松懈,并且已经越来越落后于发行的版本了。
未来的库版本是基于 GPL 的,因此我们没有升级的途径了,因为我们不能将基于 GPL 的库和 BSD/Apache 风格许可证的项目绑定到一起。因此具有一个干净的 PHP 5 是最好的选择。
事实上这并不会影响到太多人。UNIX 用户,起码是那些知道自己在做什么的人,往往会在编译 PHP 时通过 --with-mysql=/usr 将其绑定到自己系统中的 libmyqlclient 库上。Windows 用户可以在 php.ini 中激活 php_mysql.dll扩展库。更多细节见 MySQL 函数中的安装指南。此外,确认 libmysql.dll在系统路径中。具体怎样做的详情,请阅读 FAQ 中的 设定 Windows 系统路径。因为 libmysql.dll(以及很多其它 PHP 有关文件)存放于 PHP 目录中,可能需要将 PHP 目录加入到系统路径中。
你试图用一个值为 0 的结果资源号。0 表示你的查询由于某原因失败了,需要在提交查询之后和在使用返回结果资源号之前检查错误。正确的方法是用类似如下的代码:
<?php
$result = mysql_query ( "SELECT * FROM tables_priv" );
if (! $result ) {
echo mysql_error ();
exit;
}
?>
<?php
$result = mysql_query ( "SELECT * FROM tables_priv" )
or die( "Bad query: " . mysql_error ());
?>
[#1] ashay dot chaudhary at microsoft dot com [2010-05-09 13:20:42]
Q: I heard it's possible to access Microsoft SQL Server from PHP. How?
"On Windows machines, you can simply use the included ODBC support and the correct ODBC driver."
There is a better solution now, download the SQL Server Driver for PHP from Microsoft's Download Center, it is officially supported by Microsoft.
Source code: sqlsrvphp.codeplex.com
[#2] plandis98 at yahoo dot com [2005-12-18 10:46:38]
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
[#3] djlopez at gmx dot de [2005-09-08 05:51:18]
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.
[#4] [2005-03-20 13:19:43]
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.
[#5] knb at gfz-potsdam dot de [2004-10-11 02:53:39]
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.