為了能夠順利的使用本類函數,必須在編譯 PHP 的時候增加 MySQL 的支援。
編譯時,只要使用
--with-mysql[=DIR]
配置選項即可,其中可選的
[DIR] 指向 MySQL 的安裝目錄。
本 MySQL 增加庫不支援 MySQL 4.1.0 以上版本全部功能。對此,可用
MySQLi。
若果要同時安裝 mysql 增加庫和 mysqli 增加庫,必須使用同一個用戶端庫以避免任何衝突。
預設開啟了 --with-mysql
選項。此預設行為可以用
--without-mysql
配置選項來禁止。若果啟用 MySQL 而不指定安裝目錄的話,PHP
將使用綁定的 MySQL 用戶端連線庫。
還有其它套用程式使用 MySQL(例如
auth-mysql)的會員不要用綁定的庫,而要指定 MySQL 的安裝目錄,如這樣:--with-mysql=/path/to/mysql。這將強制
PHP 使用隨 MySQL 安裝的用戶端連線庫,就可以避免任何衝突。
MySQL 預設未啟用,也沒有綁定的 MySQL 庫。其原因見此
FAQ。使用
--with-mysql[=DIR]
配置選項來加入 MySQL 的支援。可以從
MySQL
下載標頭檔和庫。
MySQL 預設未啟用,因此必須在 php.ini 中啟動
php_mysql.dll 動態連線庫。此外,PHP
還需要訪問 MySQL 用戶端連線庫。PHP 的 Windows
發行版內含了一個
libmysql.dll,為了讓 PHP 能和
MySQL 對話,此檔案必須放在 Windows 的系統路徑
PATH 中。怎樣做見 FAQ
中的「怎樣把 PHP
目錄加入到 Windows 路徑中」。儘管將
libmysql.dll 複製到 Windows
系統目錄中也可以(因為系統目錄預設在系統路徑
PATH 中),但不推薦這樣做。
要啟動任何 PHP 增加庫(例如
php_mysql.dll),PHP 指令
extension_dir
要被設為 PHP 增加庫所在的目錄。參見手動 Windows
安裝指南。PHP 5 下 extension_dir 取值的一個例子是
c:\php\ext。
注:
若果啟動 web 伺服器時出現類似如下的錯誤:"Unable
to load dynamic library './php_mysql.dll'",這是因為系統找不到
php_mysql.dll 和/或
libmysql.dll。
警示 |
當同時加在本增加庫和 recode 增加庫時 PHP 可能會崩潰。更多訊息見
recode 增加庫。
|
注:
若果需要不同於
latin(預設值)的字集,必須安裝外部的(非綁定的)已編譯入所需字集支援的
libmysql。
這些函數的行為受 php.ini 的影響。
表格 1. MySQL 配置選項
選項名稱 | 預設值 | 可修改範圍 | 更新記錄 |
---|
mysql.allow_persistent | "1" | PHP_INI_SYSTEM | |
mysql.max_persistent | "-1" | PHP_INI_SYSTEM | |
mysql.max_links | "-1" | PHP_INI_SYSTEM | |
mysql.trace_mode | "0" | PHP_INI_ALL | 自 PHP 4.3.0 起可用 |
mysql.default_port | NULL | PHP_INI_ALL | |
mysql.default_socket | NULL | PHP_INI_ALL | 自 PHP 4.0.1 起可用 |
mysql.default_host | NULL | PHP_INI_ALL | |
mysql.default_user | NULL | PHP_INI_ALL | |
mysql.default_password | NULL | PHP_INI_ALL | |
mysql.connect_timeout | "60" | PHP_INI_ALL | 自 PHP 4.3.0 起可用。在 PHP <= 4.3.2 時為 PHP_INI_SYSTEM |
有關 PHP_INI_* 常量進一步的細節與定義參見
附錄 G。
以下是配置選項的簡要解釋。
- mysql.allow_persistent
boolean
是否容許 MySQL
的持久連線。
- mysql.max_persistent
integer
每個程式中最大的持久連線數目。
- mysql.max_links
integer
每個程式中最大的連線數,內含持久連線。
- mysql.trace_mode
boolean
追蹤模式。當啟動 mysql.trace_mode
時,將會顯示 table/index
掃瞄的警示,未釋放的結果集以及
SQL 錯誤。(PHP 4.3.0 引進)
- mysql.default_port
string
指定預設連線資料庫的 TCP 埠號。若果沒有指定預設埠號,則按順序從
MYSQL_TCP_PORT
環境變量,/etc/services 檔案中的 mysql-tcp
項或是編譯時特殊的 MYSQL_PORT 常量中取得。Win32 環境下只會使用
MYSQL_PORT 常量。
- mysql.default_socket
string
當使用本地連線的時候,預設的 socket 名稱。
- mysql.default_host
string
預設連線的資料庫伺服器位址。不適用於 SQL 安全模式。
- mysql.default_user
string
預設連線資料庫時使用的會員名。不適用於 SQL 安全模式。
- mysql.default_password
string
預設連線資料庫時使用的密碼。不適用於 SQL 安全模式。
- mysql.connect_timeout
integer
連線逾時秒數。在 Linux 中,此參數設定了等候來自伺服器的響應的時長。
在 MySQL 模組中使用了兩種資源類型。第一種是資料庫的連線識別碼,第二種是 SQL 查詢返回的結果集。
以下常量由本增加模組定義,因此只有在本增加模組被編譯到
PHP 中,或是在運行時被動態加載後才有效。
在 PHP 4.3.0 以後的版本中,容許在
mysql_connect() 函數和 mysql_pconnect()
函數中指定更多的用戶端旗標。下面列出所定義的常量:
表格 2. MySQL 用戶端常量
常量 | 說明 |
---|
MYSQL_CLIENT_COMPRESS | 使用壓縮的通信協定 |
MYSQL_CLIENT_IGNORE_SPACE | 容許在函數名後留空格位 |
MYSQL_CLIENT_INTERACTIVE | 容許設定中斷連線之前所閒置等候的 interactive_timeout 時間(代替 wait_timeout)。 |
MYSQL_CLIENT_SSL |
使用 SSL 加密。本標誌僅在 MySQL 用戶端庫版本為
4.x 或更高版本時可用。在 PHP 4 和 Windows 版的 PHP 5
安裝包中綁定的都是 3.23.x。
|
mysql_fetch_array() 函數使用一個常量來表示所返回陣列的類型。下面是常量的定義:
表格 3. MySQL fetch 常量
常量 | 說明 |
---|
MYSQL_ASSOC |
返回的資料列使用欄位名作為陣列的索引名。
|
MYSQL_BOTH |
返回的資料列使用欄位名及數字索引作為陣列的索引名。
|
MYSQL_NUM |
返回的資料列使用數字索引作為陣列的索引名。索引從 0 開始,表示返回結果的第一個欄位。
|
注:
大多數 MySQL 函數都接受
link_identifier
作為最後一個可選參數。若果未提供此參數,則使用最後一個開啟的連線。若果不存在連線,則會用
php.ini 中定義的預設參數去嘗試建立連線。若果連線不成功,函數返回 FALSE。
下面的簡單例子演示如何連線資料庫,執行查詢語句,列印返回結果集和中斷資料庫等一系列基本的
MySQL 動作。
例子 1. MySQL 例子
<?php // 連線,選取資料庫 $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('my_database') or die('Could not select database');
// 執行 SQL 查詢 $query = 'SELECT * FROM my_table'; $result = mysql_query($query) or die('Query failed: ' . mysql_error());
// 用 HTML 顯示結果 echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n";
// 釋放結果集 mysql_free_result($result);
// 關閉連線 mysql_close($link); ?>
|
|