PHP 程式設計/MySQL
MySQL 是與 PHP 一起使用的最流行的資料庫。PHP 與 MySQL 的組合非常強大,展示了伺服器端指令碼的真正力量。PHP 在單獨模組的幫助下提供了廣泛的 MySQL 函式。在 PHP5 中,該模組已被移除,必須單獨下載。
MySQL 允許使用者建立表,資料可以在表中儲存得比在陣列中儲存得更有效率。
為了有效地使用 MySQL 或資料庫,您需要理解 SQL 或結構化查詢語言。
請注意,此頁面使用 mysqli 函式,而不是舊的 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);
?>
一旦您理解了MySQL與PHP互動的基本原理,您可能想開始學習全文字搜尋引擎。當您的網站變得很大(數百萬條資料庫記錄)時,MySQL查詢將開始變得非常緩慢,尤其是在使用它們搜尋包含萬用字元的文字時。
WHERE content='%text%')
有很多免費/付費的解決方案可以解決這個問題。一個好的開源全文字搜尋引擎是Sphinx Search。有一個WikiBook介紹瞭如何將其與PHP和MySQL一起使用,它解釋了索引的工作原理。您可能想在閱讀官方文件之前先閱讀它。