在第二章中,我們使用一個叫mysql的程式來串連到MySQL資料庫伺服器,在這個程式中,我們可以輸入SQL查詢(命令)並立即顯示查詢結果。在PHP中,有著類似的機制:mysql_query函數。
在這兒,是一個包含將執行的SQL命令的字串。和mysql_select_db一樣,串連標識這個參數也是可選的。
這個函數的返回決定於發出的查詢的類型。對於絕大多數的SQL命令來說,mysql_query返回邏輯真或邏輯假來標明執行是否成功。請參看下面這個例子,這是用來建立我們在第二章中建立的Jokes資料表的:
$sql = "CREATE TABLE Jokes ( " . "ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " . "JokeText TEXT, " . "JokeDate DATE NOT NULL " . ")"; if ( mysql_query($sql) ) { echo("Jokes table successfully created! "); } else { echo("Error creating Jokes table: " . mysql_error() . " "); } |
這兒使用的mysql_error將以字串的形式返回MySQL伺服器最後發出的錯誤資訊。
對於DELETE、 INSERT以及UPDATE(用來修改儲存的資料),MySQL可以知道有多少資料行被這個查詢影響。參看下面的SQL命令,這個命令我們曾在第二章中用來設定所有包含單詞“chicken”的笑話的日期:
$sql = "UPDATE Jokes SET JokeDate='1990-04-01' " .
"WHERE JokeText LIKE '%chicken%'";
當我們執行這個查詢時,我們可以使用mysql_affected_rows函數來顯示這個修改所影響的資料行的數目:
if ( mysql_query($sql) ) { echo("Update affected " . mysql_affected_rows() . " rows. "); } else { echo("Error performing update: " . mysql_error() . " "); } |
SELECT命令會有一些不同,因為它會得到許多資訊,而PHP必須提供方法來處理這些資訊。
處理SELECT結果集
對於絕大多數的SQL查詢來說,mysql_query函數僅僅返回邏輯真或邏輯假。而對於 SELECT查詢來說,僅僅這樣顯然是不夠的。你應該還記得 SELECT查詢是用來顯示資料庫中儲存的資料的。除了指出查詢成功還是失敗之外,PHP還必須得到查詢的結果。作為一個結果,當我們執行一個 SELECT查詢的時候,mysql_query會返回一個標識“結果集”的數字,這將包含了這個查詢返回的所有行的列表。如果查詢失敗,函數仍然是返回 一個邏輯假。
$result = mysql_query("SELECT JokeText FROM Jokes"); if (!$result) { echo("Error performing query: " . mysql_error() . " "); exit(); } |
假定在執行查詢時沒有遇到錯誤,上面的代碼會定位一個有關儲存在笑話庫中所有笑話的本文的結果集,這個定位被儲存在變數$result中。因為資料庫中的笑話的數目是沒有限制的,這個結果集可能非常龐大。