首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 查詢 MySQL 並輸出 JSON 格式資料完整範例 (含單筆/多筆)

     編輯:PHP 相關知識

前後端分離架構下,PHP 常需將資料庫查詢結果編碼為 JSON 回傳。本文提供使用 mysqli (推薦) 與舊版 mysql 兩種寫法,涵蓋單筆與多筆資料結構。

現代寫法:mysqli + Prepared Statements (推薦)

<?php
header('Content-Type: application/json; charset=utf-8');

$mysqli = new mysqli('localhost', 'user', 'password', 'database');
if ($mysqli->connect_errno) {
    http_response_code(500);
    echo json_encode(['error' => 'Database connection failed: ' . $mysqli->connect_error]);
    exit;
}
$mysqli->set_charset('utf8mb4');

// --- 多筆資料查詢 ---
$stmt = $mysqli->prepare('SELECT id, name, email FROM users WHERE status = ?');
$status = 1;
$stmt->bind_param('i', $status);
$stmt->execute();
$result = $stmt->get_result();

$users = [];
while ($row = $result->fetch_assoc()) {
    $users[] = $row;
}
$stmt->close();

// 輸出結構:{ "dataList": [ {...}, {...} ] }
echo json_encode(['dataList' => $users], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

$mysqli->close();
?>

單筆資料查詢

<?php
// ... 連線同前 ...
$stmt = $mysqli->prepare('SELECT id, name, email FROM users WHERE id = ?');
$id = 123;
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result();

if ($row = $result->fetch_assoc()) {
    // 輸出結構:{ "jsonObj": {...} }
    echo json_encode(['jsonObj' => $row], JSON_UNESCAPED_UNICODE);
} else {
    http_response_code(404);
    echo json_encode(['error' => 'User not found']);
}
$stmt->close();
$mysqli->close();
?>

舊版 mysql 擴充套件寫法 (僅供維護舊專案參考,新專案請勿使用)

<?php
// 需包含連線設定檔 conn.php,裡面建立 $link = mysql_connect(...)
// 並執行 mysql_select_db('dbname', $link); mysql_query('SET NAMES utf8', $link);

$sql = 'SELECT id, name FROM tbl_user'; // 多筆
// $sql = 'SELECT id, name FROM tbl_user WHERE id=1'; // 單筆

$result = mysql_query($sql);
if (!$result) {
    die(json_encode(['error' => mysql_error()]));
}

if (strpos($sql, 'WHERE id=') !== false) {
    // 單筆預期
    $row = mysql_fetch_assoc($result);
    echo json_encode(['jsonObj' => $row]);
} else {
    // 多筆
    $users = [];
    while ($row = mysql_fetch_assoc($result)) {
        $users[] = $row;
    }
    echo json_encode(['dataList' => $users]);
}
mysql_free_result($result);
mysql_close();
?>

輸出範例

單筆

{"jsonObj":{"id":"1","name":"lmw","email":"lmw@example.com"}}

多筆

{"dataList":[{"id":"1","name":"lmw"},{"id":"2","name":"xxj"},{"id":"3","name":"xxxj"}]}

關鍵最佳實踐

  • 必須設定 Header:header('Content-Type: application/json; charset=utf-8'); 讓前端正確解析。
  • 使用 JSON_UNESCAPED_UNICODE:避免中文被轉成 \uXXXX,減少傳輸體積且易閱讀。
  • 錯誤處理回傳統一結構:如 {"error":"message"},前端統一攔截。
  • 防止 SQL 注入:務必使用 Prepared Statements (mysqli 或 PDO),絕不拼接變數進 SQL 字串。
  • 關閉連線與釋放結果:長執行腳本或高併發下避免連線耗盡。

進階:PDO 通用寫法 (支援多種資料庫)

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

$stmt = $pdo->prepare('SELECT id, name FROM users WHERE status = ?');
$stmt->execute([1]);
$users = $stmt->fetchAll();

echo json_encode(['dataList' => $users], JSON_UNESCAPED_UNICODE);
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved