本節包括 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 驅動程序可以做這件事。你可以下載和試用一個不會過期的免費程序,商業支援版本的價格從 $675 起。
另外一個替代方案是用帶 Windows ODBC 驅動的 SQL Server 並用它來儲存資料,你可以通過 Microsoft Access(用 ODBC)和 PHP(用內置驅動)來連接,或者用一個 Access 和 PHP 都識別的中間文件格式,例如 flat 文件或者 dBase 資料庫。關於這一點 OpenLink Software 的 Tim Hayes 寫道:
當你可以通過 ODBC 直接從 PHP 連接資料庫時- 例如用 OpenLink 的驅動程序, 使用其它資料庫做中間媒介不是一個好主意。如果你確實需要一個中間文件格式, OpenLink 已經發布了 Virtuoso(一個虛擬資料庫引擎) for NT,Linux 和其它 Unix 平台。請連接我們的網站來免費下載。 |
還有一個已被証實有效的選擇是在 Windows 下用 MySQL 和它的 MyODBC 驅動來同步資料庫。Steve Lawrence 寫道:
根據 MySQL 的說明在你的平台上安裝 MySQL。可以從 www.mysql.com 得到最新版(從你最近的鏡像站點下載!)。除了設定資料庫和配置用戶帳號以外不需要特殊的配置,你應該在 host 字段中放一個 % 或者你要用來連接 MySQL 的 Windows 機器名。記下你的伺服器名,用戶名和密碼。
從 MySQL 網站下載 MyODBC for Windows 驅動程序。最新版是 myodbc-2_50_19-win95.zip(也可以用於 NT,以及原始碼)。在你的 Windows 機器中安裝它。你可以用此程序中包括的工具來測試其操作。
用控制面板中的 ODBC 管理器新建一個用戶或系統 dsn,設定 dsn 名稱,輸入你在第一步中配置的 MySQL 資料庫的主機名,用戶名,密碼,端口等。
完整安裝 Access,這樣可以確保得到適當的插件 ... 至少你需要 ODBC 支援和連接表管理器。
新建一個 Access 資料庫。在 Table 視窗點擊右鍵並選擇 Link Tables,或者在 File 選單下選擇 Get External Data -> Link Tables。當文件瀏覽視窗打開後,選擇文件型別為:ODBC。接著選擇 System dsn 以及你在第三步建立的 dsn 的名字。再選擇要連接的表,點擊 OK。現在你可以在你的 MySQL 伺服器中打開表並新建/刪除/編輯資料了!你也可以建構查詢,導入/導出表到 MySQL,建構表單和報告等。
提示與技巧:
你可以在 Access 中建構表並導出到 MySQL 中,再把它們連接回來。這樣可以使表的建立更快。
在 Access 中建立表時,你必需定義一個基本鍵名來取得表的寫權限。確認你在把表連接到 Access 之前在 MySQL 中建立了基本鍵名。
如果你在 MySQL 中修改了表,必需重新連接到 Access。打開 Tools>Add-ins>Linked table manager,找到你的 ODBC DSN,然後在這裡選擇要重新連接的表。你也可以在這裡移動 dsn 源,在點擊 OK 之前選中 always prompt for new location。
看上去最有可能的是,PHP 4 在編譯時使用了“--with-mysql”選項但沒有指定 MySQL 的路徑。這意味著 PHP 使用了它自己內置的 MySQL 客戶端庫。如果你的系統執行了使用其它版本的 MySQL 客戶端庫的應用程序,例如作為 Apache 模塊的 PHP 3,那麼在兩個不同版本的客戶端之間有衝突。
重新編譯 PHP 4,並在標記中加上 MySQL 的路徑,“--with-mysql=/your/path/to/mysql”通常會解決此問題。
如果你的 MySQL 庫依靠 pthreads 連接就會這樣。檢查使用 ldd。如果有的話,下載 MySQL 源程序編譯,或者從源 rpm 的 spec 文件中去掉打開 threaded client 的選項然後重新編譯。以上任一建議會解決此問題。然後再加上新的 MySQL 庫重新編譯 PHP。
5. 為什麼我得到類似如下的錯誤:“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>”?
你試圖用一個值為 0 的結果資源號。0 表示你的查詢由於某原因失敗了。你需要在送出查詢之後和在使用傳回結果資源號之前檢查錯誤。正確的方法是用類似如下的代碼:
$result = mysql_query("SELECT * FROM tables_priv");
if (!$result) {
echo mysql_error();
exit;
} |
$result = mysql_query("SELECT * FROM tables_priv")
or die("Bad query: ".mysql_error()); |