mysql_query() 是 PHP 早期 MySQL 擴展的核心函數,用於向 MySQL 服務器發送 SQL 查詢或命令。本文系統講解語法、參數、返回值語義、事務行為、緩存特性及現代 mysqli/PDO 遷移指南。
resource|bool mysql_query(string $query [, resource $link_identifier = NULL ])
mysql_connect() 建立。| SQL 類型 | 成功返回 | 失敗返回 | 語義 |
|---|---|---|---|
SELECT、SHOW、EXPLAIN、DESCRIBE | 資源標識符 (resource) | false | 結果集游標,需配合 mysql_fetch_* 讀取 |
INSERT、UPDATE、DELETE、CREATE、DROP 等 | true | false | 執行成功/失敗,**不代表影響行數** |
關鍵誤區: 返回 true/資源僅表示「語法合法且服務器接受執行」,**不代表有行被影響或返回**。需用 mysql_affected_rows() 或 mysql_num_rows() 確認實際影響。
mysql_query() 自動讀取並緩存**整個結果集**到客戶端內存。大結果集易導致 OOM。mysql_unbuffered_query(),結果逐行從服務器流式讀取,內存佔用極低,但需讀完才能發送下一條查詢(同一連接下)。<?php
$con = mysql_connect("localhost", "mysql_user", "mysql_pwd");
if (!$con) die('Connect failed: ' . mysql_error());
$sql = "SELECT * FROM Person";
$result = mysql_query($sql, $con);
// 處理結果集...
mysql_close($con);
?>
<?php
$con = mysql_connect("localhost", "mysql_user", "mysql_pwd");
if (!$con) die('Connect failed: ' . mysql_error());
$sql = "CREATE DATABASE my_db";
if (mysql_query($sql, $con)) {
echo "Database my_db created";
} else {
echo "Error creating database: " . mysql_error();
}
?>
mysql_query() 及所有 mysql_* 函數 **PHP 5.5 棄用、PHP 7.0 完全移除**。| mysql_* 函數 | mysqli 替代 | 備註 |
|---|---|---|
mysql_query($sql, $link) | $mysqli->query($sql) | 返回 mysqli_result / bool |
mysql_fetch_assoc($res) | $res->fetch_assoc() | |
mysql_num_rows($res) | $res->num_rows | |
mysql_affected_rows($link) | $mysqli->affected_rows | |
mysql_error($link) | $mysqli->error | |
mysql_insert_id($link) | $mysqli->insert_id | |
mysql_real_escape_string($str,$link) | $mysqli->real_escape_string($str) | 或預處理參數綁定 |
mysql_close($link) | $mysqli->close() |