在本教程中,您將學(xué)習(xí)如何使用PHP連接到MySQL服務(wù)器。
為了存儲(chǔ)或訪問MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù),您首先需要連接到MySQL數(shù)據(jù)庫(kù)服務(wù)器。PHP提供了兩種不同的連接到MySQL服務(wù)器的方式:MySQLi(改進(jìn)的MySQL)和PDO(PHP數(shù)據(jù)對(duì)象)擴(kuò)展。
雖然PDO擴(kuò)展名更具可移植性,并且支持超過十二個(gè)不同的數(shù)據(jù)庫(kù),但顧名思義,MySQLi擴(kuò)展名僅支持MySQL數(shù)據(jù)庫(kù)。但是,MySQLi擴(kuò)展提供了一種連接到MySQL數(shù)據(jù)庫(kù)服務(wù)器并在其中執(zhí)行查詢的簡(jiǎn)便方法。PDO和MySQLi都提供了一個(gè)面向?qū)ο蟮腁PI,但是MySQLi還提供了一個(gè)過程API,對(duì)于初學(xué)者來(lái)說(shuō)相對(duì)容易理解。
提示:與PDO擴(kuò)展相比,PHP的MySQLi擴(kuò)展同時(shí)提供了速度和功能優(yōu)勢(shì),因此對(duì)于特定于MySQL的項(xiàng)目,它可能是更好的選擇。
在PHP中,您可以使用mysqli_connect()函數(shù)輕松地執(zhí)行此操作。PHP和MySQL數(shù)據(jù)庫(kù)服務(wù)器之間的所有通信都通過此連接進(jìn)行。以下是使用MySQLi和PDO擴(kuò)展連接到MySQL的三種基本語(yǔ)法:
$link = mysqli_connect("hostname", "username", "password", "database");
$mysqli = new mysqli("hostname", "username", "password", "database");
$pdo = new PDO("mysql:host=hostname;dbname=database", "username", "password");
上面語(yǔ)法中的hostname參數(shù)指定主機(jī)名(例如localhost)或MySQL服務(wù)器的IP地址,而username和password參數(shù)指定訪問MySQL服務(wù)器的憑據(jù),而數(shù)據(jù)庫(kù)參數(shù)(如果提供)將指定默認(rèn)MySQL 執(zhí)行查詢時(shí)要使用的數(shù)據(jù)庫(kù)。
下面的示例演示如何使用MySQLi(程序和面向?qū)ο蟮?/em>方式)和PDO擴(kuò)展連接到MySQL數(shù)據(jù)庫(kù)服務(wù)器。
<?php /* 嘗試MySQL服務(wù)器連接。 假設(shè)您正在運(yùn)行MySQL。 具有默認(rèn)設(shè)置的服務(wù)器(沒有密碼的用戶“root”) */ $link = mysqli_connect("localhost", "root", ""); // 檢查連接 if($link === false){ die("錯(cuò)誤:無(wú)法連接。" . mysqli_connect_error()); } //打印主機(jī)信息 echo "連接成功。 主機(jī)信息: " . mysqli_get_host_info($link); ?>
<?php /* 嘗試MySQL服務(wù)器連接。 假設(shè)您正在運(yùn)行MySQL。 具有默認(rèn)設(shè)置的服務(wù)器(沒有密碼的用戶“root”) */ $mysqli = new mysqli("localhost", "root", "", "demo"); // 檢查連接 if($mysqli === false){ die("錯(cuò)誤:無(wú)法連接。" . $mysqli->connect_error); } //打印主機(jī)信息 echo "連接成功。 主機(jī)信息:" . $mysqli->host_info; ?>
<?php /*嘗試MySQL服務(wù)器連接。 假設(shè)您正在運(yùn)行MySQL。 具有默認(rèn)設(shè)置的服務(wù)器(沒有密碼的用戶“root”) */ try{ $pdo = new PDO("mysql:host=localhost", "root", ""); //將PDO錯(cuò)誤模式設(shè)置為異常 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //打印主機(jī)信息 echo "連接成功。 主機(jī)信息:" . $pdo->getAttribute(constant("PDO::ATTR_CONNECTION_STATUS")); } catch(PDOException $e){ die("錯(cuò)誤:無(wú)法連接。 " . $e->getMessage()); } ?>
注意: MySQL數(shù)據(jù)庫(kù)服務(wù)器的默認(rèn)用戶名是root,沒有密碼。但是,為了防止數(shù)據(jù)庫(kù)被入侵和未經(jīng)授權(quán)的訪問,您應(yīng)該為MySQL帳戶設(shè)置密碼。
提示:將PDO::ATTR_ERRMODE屬性設(shè)置為PDO::ERRMODE_EXCEPTION將告訴PDO在發(fā)生數(shù)據(jù)庫(kù)錯(cuò)誤時(shí)拋出異常。
腳本執(zhí)行結(jié)束后,與MySQL數(shù)據(jù)庫(kù)服務(wù)器的連接將自動(dòng)關(guān)閉。但是,如果您想提前關(guān)閉它,只需調(diào)用PHP mysqli_close()函數(shù)即可。
<?php /*嘗試MySQL服務(wù)器連接。 假設(shè)您正在運(yùn)行MySQL。 具有默認(rèn)設(shè)置的服務(wù)器(沒有密碼的用戶“root”)*/ $link = mysqli_connect("localhost", "root", ""); // 檢查連接 if($link === false){ die("錯(cuò)誤:無(wú)法連接。" . mysqli_connect_error()); } // 打印主機(jī)信息 echo "連接成功。 主機(jī)信息: " . mysqli_get_host_info($link); // 關(guān)閉連接 mysqli_close($link); ?>
<?php /*嘗試MySQL服務(wù)器連接。 假設(shè)您正在運(yùn)行MySQL。 具有默認(rèn)設(shè)置的服務(wù)器(沒有密碼的用戶“root”) */ $mysqli = new mysqli("localhost", "root", "", "demo"); // 檢查連接 if($mysqli === false){ die("錯(cuò)誤:無(wú)法連接。" . $mysqli->connect_error); } // 打印主機(jī)信息 echo "連接成功。 主機(jī)信息: " . $mysqli->host_info; // 關(guān)閉連接 $mysqli->close(); ?>
<?php /* 嘗試MySQL服務(wù)器連接。 假設(shè)您正在運(yùn)行MySQL。 具有默認(rèn)設(shè)置的服務(wù)器(沒有密碼的用戶“root”) */ try{ $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", ""); //將PDO錯(cuò)誤模式設(shè)置為異常 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //打印主機(jī)信息 echo "連接成功。 主機(jī)信息: " .$pdo->getAttribute(constant("PDO::ATTR_CONNECTION_STATUS")); } catch(PDOException $e){ die("錯(cuò)誤:無(wú)法連接。" . $e->getMessage()); } //關(guān)閉連接 unset($pdo); ?>