首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL mysql_query() 執行 SQL 語句完整指南:語法、返回值與最佳實踐

     編輯:MySQL 資料庫相關知識

mysql_query() 是 PHP 早期 MySQL 擴展的核心函數,用於向 MySQL 服務器發送 SQL 查詢或命令。本文系統講解語法、參數、返回值語義、事務行為、緩存特性及現代 mysqli/PDO 遷移指南。

一、 函數定義與語法

resource|bool mysql_query(string $query [, resource $link_identifier = NULL ])
  • $query:要執行的 SQL 語句。**字符串不應以分號結尾**。
  • $link_identifier:可選,連接標識符。省略時使用最近打開的連接;若無連接,嘗試無參數調用 mysql_connect() 建立。

二、 返回值語義詳解(核心必讀)

SQL 類型成功返回失敗返回語義
SELECT、SHOW、EXPLAIN、DESCRIBE資源標識符 (resource)false結果集游標,需配合 mysql_fetch_* 讀取
INSERT、UPDATE、DELETE、CREATE、DROP 等truefalse執行成功/失敗,**不代表影響行數**

關鍵誤區: 返回 true/資源僅表示「語法合法且服務器接受執行」,**不代表有行被影響或返回**。需用 mysql_affected_rows() 或 mysql_num_rows() 確認實際影響。

三、 自動緩存與非緩存查詢

  • 默認行為: mysql_query() 自動讀取並緩存**整個結果集**到客戶端內存。大結果集易導致 OOM。
  • 非緩存查詢: 使用 mysql_unbuffered_query(),結果逐行從服務器流式讀取,內存佔用極低,但需讀完才能發送下一條查詢(同一連接下)。

四、 實戰代碼範例

1. 基礎查詢

<?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);
?>

2. 執行 DDL:創建數據庫

<?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 完全移除**。
  • 新專案**嚴禁使用**,存量專案需規劃遷移。

遷移對照表:mysqli 面向對象風格

預處理語句(防注入標準寫法)

$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();
echo "新用戶 ID: " . $stmt->insert_id;

六、 總結

mysql_query() 曾是 PHP 操作 MySQL 的入口函數,但**已徹底淘汰**。理解其返回值語義、緩存行為對維護舊代碼有幫助,但所有新開發**必須使用 mysqli 或 PDO**,並採用**預處理語句**作為防注入基線,構建安全、高效、可維護的數據訪問層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
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()