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

PHP mysql_fetch_object() 獲取查詢結果對象教程與遷移指南

     編輯:PHP 相關知識

PHP mysql_fetch_object() 獲取查詢結果對象教程與遷移指南

警告: mysql_* 函數已在 PHP 7.0 中移除。本文面向舊項目維護人員,新開發請直接使用 mysqli 或 PDO。

函數原型

object mysql_fetch_object ( resource $result [, string $class_name = "stdClass" [, array $params ]] )
  • 返回當前行的對象,屬性名對應列名(區分大小寫)。
  • 可選參數指定實例化類名(需無參構造函數)。
  • 無數據時返回 false。

舊代碼示例

<?php
$link = mysql_connect('localhost', 'user', 'pass') or die('連接失敗');
mysql_select_db('test_db', $link);

$query = "SELECT isbn, title, author FROM books";
$result = mysql_query($query, $link);

while ($obj = mysql_fetch_object($result)) {
    // 以對象屬性訪問
    echo "ISBN: {$obj->isbn} | 書名: {$obj->title} | 作者: {$obj->author}<br>";
}
mysql_free_result($result);
?>

自定義類映射示例

<?php
class Book {
    public $isbn;
    public $title;
    public $author;
    public function getCitation() {
        return "《{$this->title}》 by {$this->author} (ISBN: {$this->isbn})";
    }
}

while ($book = mysql_fetch_object($result, 'Book')) {
    echo $book->getCitation() . "<br>";
}
?>

現代替代方案對比

方式mysqliPDO
默認對象 (stdClass)$result->fetch_object()$stmt->fetch(PDO::FETCH_OBJ)
自定義類映射$result->fetch_object('Book')$stmt->fetch(PDO::FETCH_CLASS, 'Book')
構造函數參數不支持支持 PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE

mysqli 遷移代碼

<?php
$mysqli = new mysqli('localhost', 'user', 'pass', 'test_db');
$result = $mysqli->query("SELECT isbn, title, author FROM books");

while ($book = $result->fetch_object('Book')) {
    echo $book->getCitation() . "<br>";
}
?>

PDO 遷移代碼(推薦)

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test_db;charset=utf8', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->query("SELECT isbn, title, author FROM books");
$stmt->setFetchMode(PDO::FETCH_CLASS, 'Book'); // 設置一次即可

while ($book = $stmt->fetch()) {
    echo $book->getCitation() . "<br>";
}
?>

PDO 進階:延遲屬性綁定

// 先調用構造函數,再綁定屬性(適合構造函數有必需參數的類)
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Book', [$arg1, $arg2]);

遷移核心提示

  1. 資源句柄 $result → 對象 $mysqli_result 或 PDOStatement。
  2. mysql_fetch_object($res, 'Class') → $res->fetch_object('Class') 或 $stmt->fetch(PDO::FETCH_CLASS, 'Class')。
  3. 錯誤處理統一拋出異常(PDO)或檢查 errno(mysqli)。
  4. 務必使用預處理語句 替換字符串拼接 SQL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved