跳至內容

PHP 程式設計/MySQL

來自華夏公益教科書

MySQL 是與 PHP 一起使用的最流行的資料庫。PHP 與 MySQL 的組合非常強大,展示了伺服器端指令碼的真正力量。PHP 在單獨模組的幫助下提供了廣泛的 MySQL 函式。在 PHP5 中,該模組已被移除,必須單獨下載。

MySQL 允許使用者建立表,資料可以在表中儲存得比在陣列中儲存得更有效率。

為了有效地使用 MySQL 或資料庫,您需要理解 SQL 或結構化查詢語言。

請注意,此頁面使用 mysqli 函式,而不是舊的 mysql 函式。

操作步驟

[編輯 | 編輯原始碼]

連線到 MySQL 伺服器

[編輯 | 編輯原始碼]

PHP 具有 mysqli_connect 函式來連線到處理所有低階套接字處理的 MySQL 伺服器。我們將提供 4 個引數;第一個是您的 MySQL 伺服器的名稱,第二個是 MySQL 使用者名稱,第三個是 MySQL 密碼,最後一個是資料庫名稱。在本例中,假設您的伺服器是 localhost。如果您在一個系統上執行 Web 伺服器,而在另一個系統上執行 MySQL,則可以將 localhost 替換為 MySQL 所在系統的 IP 地址或域名(確保所有防火牆都配置為開啟相應的埠)。mysqli_connect 返回一個 link_identifier,我們現在可以使用它與資料庫進行通訊。我們將此連結儲存在一個名為 $cxn 的變數中。

<?php
  $cxn = mysqli_connect ("localhost", "your_user_name", "your_password", "database_name");
?>

執行查詢

[編輯 | 編輯原始碼]

我們已連線到 mysql 伺服器並選擇了要使用的資料庫,現在我們可以對資料庫執行 SQL 查詢來選擇資訊、進行插入、更新或刪除。為此,我們使用 mysqli_query。它接受兩個引數:第一個是我們的 link_identifier,第二個是 SQL 查詢字串。如果我們正在進行 select sql 語句,mysqli_query 會生成一個資源或布林值 false 來表示我們的查詢失敗,如果我們正在進行 delete、insert 或 update,它會生成一個布林值,true 或 false,來表示操作是否成功。

執行查詢的基本程式碼是 php 函式“mysqli_query($cxn, $query)”。“$query”引數是一個 MySQL 查詢。資料庫引數是一個數據庫連線(在這裡,由 $cxn 表示的連線)。例如,要返回查詢“SELECT * FROM customers ORDER BY customer_id ASC”,您可以編寫

<?php
    mysqli_query($cxn, "SELECT * FROM customers ORDER BY customer_id ASC");
?>

但是,這種直接方法很快就會變得笨拙,因為 MySQL 查詢的長度和在處理返回值時重複查詢的常見需求。因此,所有(或幾乎所有)查詢都分為兩個步驟。首先,查詢被分配給一個變數(按照慣例,此變數名為“$query”或“$sql_query”,以便統一性和易於識別),這使程式能夠簡單地呼叫“mysqli_query($cxn, $sql_query)”。

$sql_query = "SELECT * FROM customers ORDER BY customer_id ASC";

其次,為了處理從查詢返回的資訊,實際考慮因素要求將返回的資訊也分配給一個變數。同樣地,是出於慣例而不是必要性(也就是說,您可以將其命名為任何您想要的東西),此資訊通常被分配給“$result”,並且該函式透過變數分配來呼叫。

重要的是要理解,此程式碼呼叫 mysqli_query 函式,除了將返回值分配給變數“$result”。[注意:請求資訊的查詢——SELECT、SHOW、DESCRIBE 和 EXPLAIN——返回稱為資源的內容。其他型別的查詢(操作資料庫)在操作成功時返回 TRUE,失敗或使用者沒有許可權訪問引用的表時返回 FALSE。]

為了捕獲錯誤,出於除錯目的,我們可以編寫

<?php
   $result = mysqli_query ($cxn, $sql_query)
     or die (mysqli_error () . " The query was:" . $sql_query);
?>

注意:函式前的分號die 語句被省略了。

如果函式 mysqli_query 返回 false,PHP 將終止指令碼並列印來自 MySQL 的錯誤報告(例如“您的 SQL 語法有錯誤”)以及查詢。

因此,我們的最終程式碼將是,假設有一個名為 $cxn 的資料庫連線

<?php 
$sql_query = "SELECT * FROM customers ORDER BY customer_id ASC";
$result = mysqli_query ($cxn, $sql_query)
    or die (mysqli_error () . " The query was:" . $sql_query);
?>

綜合運用

[編輯 | 編輯原始碼]

在前面的部分中,我們查看了三個命令,但沒有看如何將它們結合在一起使用。所以讓我們看看如何從名為 MyTable 的 mysql 資料庫表中選擇資訊,該表儲存在名為 MyDB 的 mysql 資料庫中。

<?php
	 //Connect to the mysql server and get back our link_identifier
	 $link = mysql_connect ("your_database_host", "your_user_name", "your_password")
                   or die('Could not connect: ' . mysql_error());
 
	 //Now, we select which database we would like to use
	 mysql_select_db ("MyDB", $link) or die('could not select database'); 
 
 //Our SQL Query
 $sql_query = "Select * From MyTable";
 
 //Run our sql query
 $result = mysql_query($sql_query)or die('query failed'. mysql_error());

 
	 //Close Database Connection
	 mysql_close ($link);
 ?>

注意:如果未指定 link identifier,則假定為mysql_connect()最後開啟的連結。

建立資料庫查詢

[編輯 | 編輯原始碼]

[由 admin@technofranchise.com : 我們使用了 my_sqli 聯結器,這是最新的結構。還有一些其他教程使用 my_sql 結構來建立資料庫連線(不要與它混淆。我們的結構是最新版本)。建立資料庫是我們在使用 php 指令碼訪問後端 MySql 伺服器時執行的第一步。這可以透過連線到伺服器來實現。之後,建立資料庫。

<?php
$cn=mysqli_connect("localhost","your_username","my_password"); 

//connecting the server
if (mysqli_connect_errno())
{
echo "Error in establisihng the connection:" . mysqli_connect_error();
}
$sql_query="CREATE DATABASE  MyDB";
if (mysqli_query($cn,$sql_query))
{
echo "Database has been created";
}
else
{
echo "Error while creating the database: ” . mysqli_error($cn);
}
?>

建立表查詢

[編輯 | 編輯原始碼]

建立表的步驟與建立資料庫一樣簡單。我們必須使用 mysqli 結構執行建立表查詢

<?php
$cn=mysqli_connect("localhost","my_username","my_password","MyDatabase");

if (mysqli_connect_errno())
{
echo "Connection failed : " . mysqli_connect_error();
}
$sql_query="CREATE TABLE  MyTable(firstName VARCHAR(18), lastName VARCHAR(18), salary DECIMAL(5,4) )";
if (mysqli_query($cn,$sql_query))
{
echo "Table created successfully";
}
else
{
echo "Error encountered  while creating the table : " . mysqli_error($cn);
}
?>

使用舊聯結器結構獲取選擇查詢資訊

[編輯 | 編輯原始碼]

這沒有幫助,因為我們該如何處理$result呢?當我們執行選擇查詢時,我們從資料庫中選擇資訊,然後獲得一個稱為資源的東西,它儲存在$result中,我們的資源識別符號。資源是一種特殊的PHP變數,但讓我們看看如何訪問此資源中的資訊。

我們可以使用一個名為mysql_fetch_assoc的函式,它接受一個引數,我們的資源識別符號$result,並生成一個與獲取的行相對應的關聯陣列。表中的每一列都對應於具有相同名稱的索引。現在我們可以提取資訊並像這樣打印出來

<?php 
 //Connect to the mysql server and get back our link_identifier
 $link = mysql_connect("localhost", "your_user_name", "your_password")
         or die('Could not connect: ' . mysql_error());


 //Now, we select which database we would like to use
 mysql_select_db("MyDB") or die('could not select database'); 

 //Our SQL Query
 $sql_query = "Select * From MyTable";

 //Run our sql query
 $result = mysql_query($sql_query)or die('query failed'. mysql_error());

 //iterate through result
 while($row = mysql_fetch_assoc($result))
 {
     //Prints out information of that row
     print_r($row);
     echo $row['foo'];
     //Prints only the column foo.
 }
 
 // Free resultset (optional)
 mysql_free_result($result);


 //Close the MySQL Link
 mysql_close($link);
 ?>


使用最新的聯結器結構插入記錄

[編輯 | 編輯原始碼]
<?php
$cn=mysqli_connect("localhost","your_username","your_password","MyDB");
if (mysqli_connect_errno())
{
echo "Connection failed : " . 
mysqli_connect_error();
}
mysqli_query($cn,"INSERT INTO MyTable(firstName, lastName, salary) VALUES ('George','Smith' ,55000)");

mysqli_close($cn);

?>

使用最新的聯結器結構更新記錄

[編輯 | 編輯原始碼]
<?php
$cn=mysqli_connect("localhost","your_username","your_password","MyDB");
if (mysqli_connect_errno())
{
echo "Connection failed : " . mysqli_connect_error();
}
mysqli_query($cn,”Update MyTable Set salary=6000 Where firstName='George' AND lastName='Smith' ");
mysqli_close($cn);
?>

刪除記錄

[編輯 | 編輯原始碼]
<?php
$cn=mysqli_connect("localhost","your_username","your_password","MyDB");
if (mysqli_connect_errno())
{
echo "Connection failed : " . mysqli_connect_error();
}
mysqli_query($cn,"Delete From MyTable Where firstName='George' AND lastName='Smith' “);
mysqli_close($cn);
?>

PHP + MySQL + Sphinx

[編輯 | 編輯原始碼]

一旦您理解了MySQL與PHP互動的基本原理,您可能想開始學習全文字搜尋引擎。當您的網站變得很大(數百萬條資料庫記錄)時,MySQL查詢將開始變得非常緩慢,尤其是在使用它們搜尋包含萬用字元的文字時。

WHERE content='%text%')

有很多免費/付費的解決方案可以解決這個問題。一個好的開源全文字搜尋引擎是Sphinx Search。有一個WikiBook介紹瞭如何將其與PHP和MySQL一起使用,它解釋了索引的工作原理。您可能想在閱讀官方文件之前先閱讀它。

[編輯 | 編輯原始碼]


華夏公益教科書