数据库相关问题 这节将讨论PHP和数据库之间最普通的问题。夸张地说,PHP几乎可以操作今天市面上有的所有的数据库。 1. 我听说PHP可以操作微软的SQL Server.应该怎样做? 2. 我可以操作微软 Access 数据库吗? 3. 我升级到了PHP 4, 现在我的mysql总是告诉我: "Warning: MySQL: Unable to save result set in ...". 这是怎么回事? 4. 安装完共享mysql支持后, 一装入libphp4.so Apache 就 dumps core . 这个问题可以修复吗? 5. 为什么我总得到这样的错误消息: : "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>? 1. 我听说PHP可以操作微软的SQL Server.应该怎样做? 在Windows平台下, 你只要使用包里所含的ODBC驱动程序就可以了。 在Unix平台下, 你可以使用Sybase-CT driver 来操作 Microsoft SQL Servers。因为它们的协议(至少绝大部份的产品) 是完全兼容的. Sybase 有一个免费的 Linux systems 版本. 对另外一些的Unix系统来说,你可能需要联系 Sybase,以得到正确的库文件 . 也可以参照下面一些问题的答案。 2. 我可以操作 Microsoft Access数据库吗? 是的。如果你是在 Windows 9x/Me, 或 NT/2000下运行,你已经有了所有必须的工具。 你可以使用ODBC 和 Microsoft's ODBC drivers for Microsoft Access databases。 如果你是在 Unix 下运行PHP,想要和Windows下的 MS Access 通讯,那么你需要Unix ODBC drivers. OpenLink Software 提供了一个 Unix-based ODBC drivers。 你可以下载一个试用(不过期)的 pilot 程序, 商业版本的价格定位在 $675 另外一种办法是使用带 Windows ODBC驱动的 SQL server来存诸数据,然后你可以用Microsoft Access (ODBC) and PHP (内置SQL Server驱动)来操作这个库。或者使用另一种文件格式, Access 和 PHP 都可以打开的, 比如操作系统文件或dBase 数据库等。关于这 OpenLink software的Tim Hayes 写了如下的文字: 在你可以使用PHP直接操作一种数据库里,使用另外的库作为中间件不是一个好的主意。 --例如用OpenLink's 驱动. 如果你确实需要中间件库, OpenLink 现在发布了 Virtuoso (虚拟数据库引擎), 可以运行在NT, Linux 其它的 unix平台. 请参阅 website 免费下载.
另一个成功的范例子是使用Windows下的Mysql(通过mysql ODBC),来同步化 Access 数据库. Steve Lawrence 写到:
3. 我升级到了PHP 4, 现在我的mysql总是告诉我: "Warning: MySQL: Unable to save result set in ...". 这是怎么回事? 大部分这样的问题,是因为 PHP 4 编译选项 '--with-mysql'没有标明你的Mysql的路径。 这样PHP就会使用它内建的MySQL库. 如果你的系统运行在这样的平台下, PHP 3 作为 Apache 模块, 或者 auth-mysql, 它们使用另外版本的Mysql驱动,这样在两个不同版本的Mysql客户端驱动上就会存在冲突。 重新编译PHP 4, 增加Mysql的路径信息, '--with-mysql=/your/path/to/mysql' 通常都能解决这个问题。 4. 安装完共享mysql支持后, 一装入libphp4.so Apache 就 dumps core . 这个问题可以修复吗? 如果你的Mysql是用 pthreads 连接的,将会发生这种情况。请使用 ldd。 如果已使用, grab the MySQL tarball and 重新编译, 或 从源代码rpm编译,移去相关文件里的打开 threaded client 代码的开关 。如果以上的两种方法都不能修复这个错误,那么重新编译新的PHP库支持新的Mysql。 5. 为什么我总得到这样的错误消息: : "Warning: 0 is not a MySQL result index in on line " or "Warning: Supplied argument is not a valid MySQL result resource in on line ? 你正在使用的结果集变量值是0。0意味着 因为某种原因你的查询失败了。在你取得结果集之前,你必须检查提交查询失败的原因。正确的写法应该如下: $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());