mysql_query
(PHP 4, PHP 5)
mysql_query — 發送一條 MySQL 查詢
本擴充套件自 PHP 5.5.0 起已廢棄,並在自 PHP 7.0.0 開始被移除。應使用 MySQLi 或 PDO_MySQL 擴充套件來替換之。參見 MySQL:選擇 API 指南來獲取更多資訊。用以替代本函式的有:
說明
$query
, resource $link_identifier
= NULL): resource
mysql_query()
向與指定的 link_identifier
關聯的伺服器中的當前活動數據庫發送一條查詢(不支援多條查詢)。
參數
-
query
-
SQL 查詢語句
查詢字串不應以分號結束。 查詢中被嵌入的數據應該正確地轉義。
-
link_identifier
-
MySQL 連線。如不指定連線標識,則使用由 mysql_connect() 最近打開的連線。如果沒有找到該連線,會嘗試不帶參數呼叫 mysql_connect() 來建立。如沒有找到連線或無法建立連線,則會產生
E_WARNING
級別的錯誤。
返回值
mysql_query() 僅對
SELECT,SHOW,DESCRIBE, EXPLAIN 和其他語句
語句返回一個 resource,如果查詢出現錯誤則返回 false
。
對於其它型別的 SQL
語句,比如INSERT, UPDATE, DELETE, DROP 之類, mysql_query()
在執行成功時返回 true
,出錯時返回 false
。
返回的結果資源應該傳遞給 mysql_fetch_array() 和其他函式來處理結果表,取出返回的數據。
假定查詢成功,可以呼叫 mysql_num_rows() 來檢視對應于 SELECT 語句返回了多少行,或者呼叫 mysql_affected_rows() 來檢視對應于 DELETE,INSERT,REPLACE 或 UPDATE 語句影響到了多少行。
如果沒有許可權訪問查詢語句中引用的表時,mysql_query()
也會返回 false
。
範例
示例 #1 無效的查詢
以下查詢語法上有錯,因此
mysql_query()
失敗並返回 false
。
<?php
$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
?>
示例 #2 有效的查詢
以下查詢語法正確,所以 mysql_query() 返回了一個 resource。
<?php
// 這應該由使用者提供,下面是一個示例
$firstname = 'fred';
$lastname = 'fox';
// 構造查詢
// 這是執行 SQL 最好的方式
// 更多例子參見 mysql_real_escape_string()
$query = sprintf("SELECT firstname, lastname, address, age FROM friends
WHERE firstname='%s' AND lastname='%s'",
mysql_real_escape_string($firstname),
mysql_real_escape_string($lastname));
// 執行查詢
$result = mysql_query($query);
// 檢查結果
// 下面顯示了實際發送給 MySQL 的查詢,以及出現的錯誤。這對除錯很有幫助。
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
// 結果的使用
// 嘗試 print $result 並不會取出結果資源中的資訊
// 所以必須至少使用其中一個 mysql 結果函式
// 參見 mysql_result(), mysql_fetch_array(), mysql_fetch_row() 等。
while ($row = mysql_fetch_assoc($result)) {
echo $row['firstname'];
echo $row['lastname'];
echo $row['address'];
echo $row['age'];
}
// 釋放關聯結果集的資源
// 在指令碼結束的時候會自動進行
mysql_free_result($result);
?>
參見
- mysql_connect() - 打開一個到 MySQL 伺服器的連線
- mysql_error() - 返回上一個 MySQL 操作產生的文字錯誤資訊
- mysql_real_escape_string() - 轉義 SQL 語句中使用的字串中的特殊字元,並考慮到連線的當前字符集
- mysql_result() - 取得結果數據
- mysql_fetch_assoc() - 從結果集中取得一行作為關聯陣列
- mysql_unbuffered_query() - 向 MySQL 發送一條 SQL 查詢,並不獲取和快取結果的行