PHP Conference Japan 2024

mysql_connect

(PHP 4, PHP 5)

mysql_connect開啟與 MySQL 伺服器的連線

警告

此擴充自 PHP 5.5.0 起已棄用,並在 PHP 7.0.0 中移除。建議改用 MySQLiPDO_MySQL 擴充。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:

說明

mysql_connect(
    字串 $server = ini_get("mysql.default_host"),
    字串 $username = ini_get("mysql.default_user"),
    字串 $password = ini_get("mysql.default_password"),
    布林值 $new_link = false,
    整數 $client_flags = 0
): 資源|false

開啟或重複使用與 MySQL 伺服器的連線。

參數

server

MySQL 伺服器。它也可以包含埠號,例如 "hostname:port" 或本地端 socket 的路徑,例如針對本地主機的 ":/path/to/socket"。

如果 PHP 指令 mysql.default_host 未定義(預設值),則預設值為 'localhost:3306'。在 SQL 安全模式 中,此參數會被忽略,並一律使用 'localhost:3306' 值。

username

使用者名稱。預設值由 mysql.default_user 定義。在 SQL 安全模式 中,此參數會被忽略,並使用擁有伺服器進程的使用者名稱。

password

密碼。預設值由 mysql.default_password 定義。在 SQL 安全模式 中,此參數會被忽略,並使用空密碼。

new_link

如果使用相同的參數再次呼叫 mysql_connect(),則不會建立新的連結,而是會傳回已開啟連結的連結識別碼。new_link 參數會修改此行為,並使 mysql_connect() 一律開啟新的連結,即使先前已使用相同參數呼叫過 mysql_connect()。在 SQL 安全模式 中,此參數會被忽略。

client_flags

client_flags 參數可以是以下常數的組合:128(啟用 LOAD DATA LOCAL 處理)、MYSQL_CLIENT_SSLMYSQL_CLIENT_COMPRESSMYSQL_CLIENT_IGNORE_SPACEMYSQL_CLIENT_INTERACTIVE。請閱讀關於 MySQL 用戶端常數 的章節以取得更多資訊。在 SQL 安全模式 中,此參數會被忽略。

回傳值

成功時傳回 MySQL 連結識別碼,失敗時傳回 false

範例

範例 #1 mysql_connect() 範例

<?php
$link
= mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'無法連線:' . mysql_error());
}
echo
'連線成功';
mysql_close($link);
?>

範例 #2 使用 主機名稱:連接埠 語法的 mysql_connect() 範例

<?php
// 連線到 example.com 的 3307 連接埠
$link = mysql_connect('example.com:3307', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'無法連線:' . mysql_error());
}
echo
'連線成功';
mysql_close($link);

// 連線到本機的 3307 連接埠
$link = mysql_connect('127.0.0.1:3307', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'無法連線:' . mysql_error());
}
echo
'連線成功';
mysql_close($link);
?>

範例 #3 使用 ":/path/to/socket" 語法的 mysql_connect() 範例

<?php
// 我們連接到 localhost 和 socket,例如 /tmp/mysql.sock

// 變體 1:省略 localhost
$link = mysql_connect(':/tmp/mysql', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'無法連線:' . mysql_error());
}
echo
'連線成功';
mysql_close($link);


// 變體 2:使用 localhost
$link = mysql_connect('localhost:/tmp/mysql.sock', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'無法連線:' . mysql_error());
}
echo
'連線成功';
mysql_close($link);
?>

注意事項

備註:

當您指定 "localhost" 或 "localhost:port" 作為伺服器時,MySQL 用戶端程式庫會覆蓋此設定並嘗試連線到本機 socket(Windows 上的命名管道)。如果您想使用 TCP/IP,請使用 "127.0.0.1" 代替 "localhost"。如果 MySQL 用戶端程式庫嘗試連線到錯誤的本機 socket,則應在 php.ini 中將正確的路徑設定為 mysql.default_host,並將伺服器欄位留空。

備註:

除非透過明確呼叫 mysql_close() 關閉,否則與伺服器的連線將在腳本執行結束後立即關閉。

備註:

錯誤訊息「無法建立 TCP/IP socket (10106)」通常表示 variables_order 設定指令不包含字元 E。在 Windows 上,如果未複製環境,則 SYSTEMROOT 環境變數將無法使用,PHP 將無法載入 Winsock。

另請參閱

新增備註

使用者貢獻的備註 3 則備註

1
nicodenboer at yahoo dot com
12 年前
如果您使用 utf8,請務必小心。

您的資料庫的 db.opt 檔案應包含以下幾行:
default-character-set=utf8
default-collation=utf8_general_ci

這表示您的資料庫被建立為使用 utf8 字元集。
一種實現方法是:
CREATE DATABASE my_database DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

然後,從 PHP 連線到它之後,您應該使用:
mysql_set_charset("UTF8", $connection);

如果不這樣做,如果其他軟體正在讀寫同一個資料庫,您將會遇到棘手的問題!!
0
VTool
8 年前
fcgid_module modules/mod_fcgid.so
FcgidMaxRequestLen 209715200
FcgidConnectTimeout 240
FcgidIOTimeout 240
FcgidBusyScanInterval 240
FcgidBusyTimeout 240
# 這行指示網頁伺服器辨識新的類型 (php)
AddHandler fcgid-script .php
# 這行指示網頁伺服器 PHP 的安裝位置。
FcgidInitialEnv PHPRC "c:/php"
# 這行指示網頁伺服器,當客戶端(瀏覽器)要求具有 .php
# 副檔名的頁面時,應執行 php-cgi.exe 應用程式。

FcgidWrapper "c:/php/php-cgi.exe" .php
# 透過這行,我們授予必要的權限,讓客戶端可以
# 存取/執行 .php 檔案。
<Directory "c:/Apache/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride None
Allow from all
</Directory>
-5
cory dot mawhorter gmail.com
15 年前
希望這可以幫其他人省去一些麻煩。

我的開發電腦是 Windows 系統,並執行 WampServer。在資料庫活動頻繁的時期後,我的 PHP 經常無法連線到 MySQL。

長話短說,這是因為我沒有透過命名管道執行 MySQL,而 Windows 系統的可用連接埠不足以服務 PHP。顯然,在 Windows 上,您有 5000 個連接埠可以使用,一旦它們被開啟,它們會保持 120 秒才會被釋放。這會導致 MySQL/網路問題,因為每次連線都會要求一個新的連接埠。

您可以閱讀更多關於此問題的資訊:
(連結太長,必須分開)
https://mysqldev.dev.org.tw/doc/refman/5.0/en
/can-not-connect-to-server.html#can-not-connect-to-server-on-windows
?>

由於 MySQL 位於本機主機上,我可以啟用命名管道(如果您不需要網路,這就是您應該設定 MySQL 的方式)來解決這個問題,而不是該頁面上列出的解決方法。

詳情請參閱:
https://mysqldev.dev.org.tw/tech-resources
/articles/securing_mysql_windows.html
To Top