資料庫相關問題
這節將討論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());