跳轉到內容

PHP 程式設計/PHP 和 MySQL

來自華夏公益教科書,開放的書籍,開放的世界

注意:您應該瞭解 SQL 才能使用 MySQL。您可以在SQL 書籍中學習。

PHP 與 MySQL 整合良好,幷包含一個完整的庫,其中包含許多有用的函式來幫助您使用 MySQL。甚至還有許多用 PHP 編寫的資料庫管理器。

MySQL 不是執行 PHP 的伺服器的一部分,它是一個不同的伺服器。MySQL 是眾多資料庫伺服器之一,它是開源的,您可以從這裡獲取。

從 PHP5 開始,MySQLi 整合預設情況下未啟用,您應該手動新增它,請參閱這裡瞭解安裝說明,PHP4 預設情況下已啟用它。


注意:mysql_*() 函式在 PHP 5.6+ 中已棄用,並在 PHP7+ 中刪除。請改用 PDO 或 mysqli。

讓我們開始吧!

連線到 MySQL 伺服器

[編輯 | 編輯原始碼]

要連線到 MySQL 伺服器,您應該使用 mysqli_connect() 函式或 mysqli() 類。它以以下方式使用

mysqli_connect(servername, username, password,database);

servername - 伺服器的名稱或地址。通常為 'localhost'。username, password - 用於登入伺服器的使用者名稱和密碼。

database - 您要選擇的資料庫名稱。它是可選的。

多個 MySQL 連線

[編輯 | 編輯原始碼]

雖然不常用,但您可以在一個指令碼中連線到多個數據庫伺服器。連線成功後,mysqli_connect() 會返回對伺服器的引用,您可以使用變數捕獲它

$con = mysqli_connect("localhost", "root", "123");
$con2 = mysqli_connect("http://www.example.com/", "root", "123");

選擇您的資料庫

[編輯 | 編輯原始碼]

為了執行大多數操作(當然,除了建立、刪除和列出資料庫外),您必須選擇一個數據庫。為此,請使用 mysqli_select_db(),但前提是您沒有在 mysqli_connect() 中定義它。

mysqli_select_db(db_name);

其中 db_name 是資料庫名稱。

預設情況下,mysqli_select_db() 會嘗試選擇最後一個開啟的 mySQL 連線上的資料庫。因此,在以下程式碼中,mysqli_select_db() 會嘗試選擇 "example.com" 伺服器上的資料庫。

$con = mysqli_connect("localhost", "root", "123");
$con2 = mysqli_connect("example.com:3306", "root", "123");
mysqli_select_db("database1");

該函式採用第二個可選引數,您可以使用它來選擇與最後一個開啟的資料庫不同的資料庫

$con = mysqli_connect("localhost", "root", "123");
$con2 = mysqli_connect("example.com:3306", "root", "123");
mysqli_select_db("database1", $con);

執行查詢

[編輯 | 編輯原始碼]

要執行查詢,請使用 mysqli_query()。例如

mysqli_query($con,"UPDATE table1 SET column1='value1', column2='value2' WHERE column3='value3'");


重要:mysqli_query() 返回一個資源連結,您需要它來執行某些操作。因此,您應該透過將結果儲存在變數中來捕獲它

$query1 = mysqli_query($con,"UPDATE table1 SET column1='value1', column2='value2' WHERE column3='value3'");

用於 SELECT 查詢的函式

[編輯 | 編輯原始碼]

執行 SELECT 查詢很好,但有時我們可能想要結果(人們很奇怪)。PHP 開發人員就是那些奇怪的人,他們在 PHP 中添加了一些函式來幫助我們解決這個問題

mysqli_fetch_row()

[編輯 | 編輯原始碼]

返回結果中的下一行。它作為陣列返回,因此您應該將其捕獲在一個變數中。

例如

$query1 = mysqli_query($con,"SELECT id, name, address FROM phone_book");

$person = mysqli_fetch_row($query1);

print_r($person);

這應該輸出類似於這樣的內容

Array
{
    [0] => 1
    [1] => Sharon
    [2] => Helm, 3
}

此函式將始終返回結果中的下一行,直到最終它用完行並返回false。此函式的非常常見的用法是使用while迴圈,例如

$query1 = mysqli_query($con,"SELECT id, name, address FROM phone_book");

while($person = mysqli_fetch_row($query1))
{ 
    print_r($person);
    echo "\n";
}

這應該輸出類似於這樣的內容

Array
{
    [0] => 1
    [1] => Sharon
    [2] => Helm, 3
}
Array
{
    [0] => 2
    [1] => Adam
    [2] => 23rd street, 5
}
Array
{
    [0] => 3
    [1] => Jane
    [2] => Unknown
}

mysqli_fetch_array()

[編輯 | 編輯原始碼]

此函式與mysqli_fetch_row()的功能完全相同,只是它返回一個關聯陣列。

$query1 = mysqli_query($conn,"SELECT id, name, address FROM phone_book");

$person = mysqli_fetch_array($con,$query1);

print_r($person);

應該輸出類似於這樣的內容

Array
{
    [id] => 1
    [name] => Sharon
    [address] => Helm, 3
}

mysqli_num_rows()

[編輯 | 編輯原始碼]

有時我們想知道從查詢結果中獲得了多少行。這可以透過類似於這樣的方法來完成

$counter = 0;
$query1 = mysqli_query($con,"SELECT id, name, address FROM phone_book");

while(mysqli_fetch_row($query1))
{
    $counter++;
}

現在$counter儲存了我們從查詢中獲得的行數,但 PHP 有一個特殊的函式來處理這種情況

$query1 = mysqli_query($con,"SELECT id, name, address FROM phone_book"); 
$counter = mysqli_num_rows($query1);

$counter儲存相同的值,但這不是更容易嗎?

用於其他查詢的函式

[編輯 | 編輯原始碼]

以下函式不僅適用於 SELECT 查詢,也適用於許多型別的查詢。這些查詢在許多情況下都很有用。

mysqli_info()

[編輯 | 編輯原始碼]

將返回有關最後執行的查詢的資訊,或有關您向其傳送資源的查詢的資訊

mysqli_info();    //For the last query executed
mysql_info($query); //For $query, what ever that is...

資訊以字串形式返回,雖然它已模板化,但通常不會由指令碼分析,而是用於輸出。

mysqli_affected_rows()

[編輯 | 編輯原始碼]

返回受查詢影響的行數,僅適用於 INSERT、UPDATE 或 DELETE 查詢

mysqli_affected_rows();       //For the last query executed
mysqli_affected_rows($query); //For $query, what ever that is

mysqli_insert_id()

[編輯 | 編輯原始碼]

返回在 INSERT 查詢後 MySQL 分配給表中 auto_increment 列的 ID。

$result = mysqli_query($con,"INSERT 'Bob' INTO names(firstname)");
$new_id = mysqli_insert_id();

注意:你應該在執行查詢後立即呼叫 mysqli_insert_id()。如果在 mysqli_insert_id() 之間發出另一個語句,它將返回 NULL!

關閉連線

[編輯 | 編輯原始碼]

你應該使用 mysqli_close() 來關閉 MySQL 連線。這通常會關閉最後一個開啟的連線,當然,你可以向它傳送一個連線識別符號。

mysqli_close();  //Close the last connection opened
mysqli_close($con); //Close connection $con


華夏公益教科書