mysql_query

(PHP 4, PHP 5)

mysql_query發(fā)送一條 MySQL 查詢

警告

本擴(kuò)展自 PHP 5.5.0 起已廢棄,并在自 PHP 7.0.0 開始被移除。應(yīng)使用 MySQLiPDO_MySQL 擴(kuò)展來(lái)替換之。參見 MySQL:選擇 API 指南來(lái)獲取更多信息。用以替代本函數(shù)的有:

說(shuō)明

mysql_query(string $query, resource $link_identifier = NULL): resource

mysql_query() 向與指定的 link_identifier 關(guān)聯(lián)的服務(wù)器中的當(dāng)前活動(dòng)數(shù)據(jù)庫(kù)發(fā)送一條查詢(不支持多條查詢)。

參數(shù)

query

SQL 查詢語(yǔ)句

查詢字符串不應(yīng)以分號(hào)結(jié)束。 查詢中被嵌入的數(shù)據(jù)應(yīng)該正確地轉(zhuǎn)義。

link_identifier

MySQL 連接。如不指定連接標(biāo)識(shí),則使用由 mysql_connect() 最近打開的連接。如果沒有找到該連接,會(huì)嘗試不帶參數(shù)調(diào)用 mysql_connect() 來(lái)創(chuàng)建。如沒有找到連接或無(wú)法建立連接,則會(huì)生成 E_WARNING 級(jí)別的錯(cuò)誤。

返回值

mysql_query() 僅對(duì) SELECT,SHOW,DESCRIBE, EXPLAIN 和其他語(yǔ)句 語(yǔ)句返回一個(gè) resource,如果查詢出現(xiàn)錯(cuò)誤則返回 false

對(duì)于其它類型的 SQL 語(yǔ)句,比如INSERT, UPDATE, DELETE, DROP 之類, mysql_query() 在執(zhí)行成功時(shí)返回 true,出錯(cuò)時(shí)返回 false。

返回的結(jié)果資源應(yīng)該傳遞給 mysql_fetch_array() 和其他函數(shù)來(lái)處理結(jié)果表,取出返回的數(shù)據(jù)。

假定查詢成功,可以調(diào)用 mysql_num_rows() 來(lái)查看對(duì)應(yīng)于 SELECT 語(yǔ)句返回了多少行,或者調(diào)用 mysql_affected_rows() 來(lái)查看對(duì)應(yīng)于 DELETE,INSERT,REPLACE 或 UPDATE 語(yǔ)句影響到了多少行。

如果沒有權(quán)限訪問查詢語(yǔ)句中引用的表時(shí),mysql_query() 也會(huì)返回 false。

范例

示例 #1 無(wú)效的查詢

以下查詢語(yǔ)法上有錯(cuò),因此 mysql_query() 失敗并返回 false。

<?php
$result 
mysql_query('SELECT * WHERE 1=1');
if (!
$result) {
    die(
'Invalid query: ' mysql_error());
}

?>

示例 #2 有效的查詢

以下查詢語(yǔ)法正確,所以 mysql_query() 返回了一個(gè) resource

<?php
// 這應(yīng)該由用戶提供,下面是一個(gè)示例
$firstname 'fred';
$lastname  'fox';

// 構(gòu)造查詢
// 這是執(zhí)行 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));

// 執(zhí)行查詢
$result mysql_query($query);

// 檢查結(jié)果
// 下面顯示了實(shí)際發(fā)送給 MySQL 的查詢,以及出現(xiàn)的錯(cuò)誤。這對(duì)調(diào)試很有幫助。
if (!$result) {
    
$message  'Invalid query: ' mysql_error() . "\n";
    
$message .= 'Whole query: ' $query;
    die(
$message);
}

// 結(jié)果的使用
// 嘗試 print $result 并不會(huì)取出結(jié)果資源中的信息
// 所以必須至少使用其中一個(gè) mysql 結(jié)果函數(shù)
// 參見 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'];
}

// 釋放關(guān)聯(lián)結(jié)果集的資源
// 在腳本結(jié)束的時(shí)候會(huì)自動(dòng)進(jìn)行
mysql_free_result($result);
?>

參見

  • mysql_connect() - 打開一個(gè)到 MySQL 服務(wù)器的連接
  • mysql_error() - 返回上一個(gè) MySQL 操作產(chǎn)生的文本錯(cuò)誤信息
  • mysql_real_escape_string() - 轉(zhuǎn)義 SQL 語(yǔ)句中使用的字符串中的特殊字符,并考慮到連接的當(dāng)前字符集
  • mysql_result() - 取得結(jié)果數(shù)據(jù)
  • mysql_fetch_assoc() - 從結(jié)果集中取得一行作為關(guān)聯(lián)數(shù)組
  • mysql_unbuffered_query() - 向 MySQL 發(fā)送一條 SQL 查詢,并不獲取和緩存結(jié)果的行