(PHP 4, PHP 5)
mysql_query — 發(fā)送一條 MySQL 查詢
本擴展自 PHP 5.5.0 起已廢棄,并在自 PHP 7.0.0 開始被移除。應使用 MySQLi 或 PDO_MySQL 擴展來替換之。參見 MySQL:選擇 API 指南來獲取更多信息。用以替代本函數(shù)的有:
$query
, resource $link_identifier
= NULL): resource
mysql_query()
向與指定的 link_identifier
關聯(lián)的服務器中的當前活動數(shù)據(jù)庫發(fā)送一條查詢(不支持多條查詢)。
query
SQL 查詢語句
查詢字符串不應以分號結束。 查詢中被嵌入的數(shù)據(jù)應該正確地轉義。
link_identifier
MySQL
連接。如不指定連接標識,則使用由 mysql_connect()
最近打開的連接。如果沒有找到該連接,會嘗試不帶參數(shù)調(diào)用
mysql_connect()
來創(chuàng)建。如沒有找到連接或無法建立連接,則會生成
E_WARNING
級別的錯誤。
mysql_query() 僅對
SELECT,SHOW,DESCRIBE, EXPLAIN 和其他語句
語句返回一個 resource,如果查詢出現(xiàn)錯誤則返回 false
。
對于其它類型的 SQL
語句,比如INSERT, UPDATE, DELETE, DROP 之類, mysql_query()
在執(zhí)行成功時返回 true
,出錯時返回 false
。
返回的結果資源應該傳遞給 mysql_fetch_array() 和其他函數(shù)來處理結果表,取出返回的數(shù)據(jù)。
假定查詢成功,可以調(diào)用 mysql_num_rows() 來查看對應于 SELECT 語句返回了多少行,或者調(diào)用 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';
// 構造查詢
// 這是執(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);
// 檢查結果
// 下面顯示了實際發(fā)送給 MySQL 的查詢,以及出現(xiàn)的錯誤。這對調(diào)試很有幫助。
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
// 結果的使用
// 嘗試 print $result 并不會取出結果資源中的信息
// 所以必須至少使用其中一個 mysql 結果函數(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'];
}
// 釋放關聯(lián)結果集的資源
// 在腳本結束的時候會自動進行
mysql_free_result($result);
?>