PHP 程式設計/PHP 和 MySQL
注意:您應該瞭解 SQL 才能使用 MySQL。您可以在SQL 書籍中學習。
PHP 與 MySQL 整合良好,幷包含一個完整的庫,其中包含許多有用的函式來幫助您使用 MySQL。甚至還有許多用 PHP 編寫的資料庫管理器。
MySQL 不是執行 PHP 的伺服器的一部分,它是一個不同的伺服器。MySQL 是眾多資料庫伺服器之一,它是開源的,您可以從這裡獲取。
從 PHP5 開始,MySQLi 整合預設情況下未啟用,您應該手動新增它,請參閱這裡瞭解安裝說明,PHP4 預設情況下已啟用它。
注意:mysql_*() 函式在 PHP 5.6+ 中已棄用,並在 PHP7+ 中刪除。請改用 PDO 或 mysqli。
讓我們開始吧!
要連線到 MySQL 伺服器,您應該使用 mysqli_connect() 函式或 mysqli() 類。它以以下方式使用
mysqli_connect(servername, username, password,database);
servername - 伺服器的名稱或地址。通常為 'localhost'。username, password - 用於登入伺服器的使用者名稱和密碼。
database - 您要選擇的資料庫名稱。它是可選的。
雖然不常用,但您可以在一個指令碼中連線到多個數據庫伺服器。連線成功後,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 查詢很好,但有時我們可能想要結果(人們很奇怪)。PHP 開發人員就是那些奇怪的人,他們在 PHP 中添加了一些函式來幫助我們解決這個問題
返回結果中的下一行。它作為陣列返回,因此您應該將其捕獲在一個變數中。
例如
$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_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
}
有時我們想知道從查詢結果中獲得了多少行。這可以透過類似於這樣的方法來完成
$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(); //For the last query executed mysql_info($query); //For $query, what ever that is...
資訊以字串形式返回,雖然它已模板化,但通常不會由指令碼分析,而是用於輸出。
返回受查詢影響的行數,僅適用於 INSERT、UPDATE 或 DELETE 查詢
mysqli_affected_rows(); //For the last query executed mysqli_affected_rows($query); //For $query, what ever that is
返回在 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