# PHP中fetch怎么使用 在PHP开发中,`fetch`是数据库操作的核心方法之一,主要用于从查询结果中逐行获取数据。本文将详细介绍PDO和MySQLi两种扩展中`fetch`的使用方法、常见模式及实际应用场景。 --- ## 一、PDO中的fetch方法 ### 1. 基本语法 ```php $stmt = $pdo->query("SELECT * FROM users"); $row = $stmt->fetch(PDO::FETCH_ASSOC);
模式常量 | 返回形式 | 示例输出 |
---|---|---|
PDO::FETCH_ASSOC | 关联数组 | ['id'=>1, 'name'=>'John'] |
PDO::FETCH_NUM | 数字索引数组 | [0=>1, 1=>'John'] |
PDO::FETCH_BOTH | 同时包含关联和数字索引 | 混合数组 |
PDO::FETCH_OBJ | 标准PHP对象 | $row->name |
PDO::FETCH_CLASS | 映射到指定类的对象 | 需提前定义类 |
try { $pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass"); $stmt = $pdo->query("SELECT id, username FROM users"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "ID: {$row['id']}, Name: {$row['username']}\n"; } } catch (PDOException $e) { die("Query failed: " . $e->getMessage()); }
// 获取所有结果 $allRows = $stmt->fetchAll(PDO::FETCH_ASSOC); // 分块处理大数据 $stmt->execute(); while ($chunk = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT, 100)) { // 每次处理100条 }
$conn = mysqli_connect("localhost", "user", "pass", "test"); $result = mysqli_query($conn, "SELECT * FROM products"); while ($row = mysqli_fetch_assoc($result)) { print_r($row); }
$mysqli = new mysqli("localhost", "user", "pass", "test"); $result = $mysqli->query("SELECT * FROM orders"); while ($row = $result->fetch_object()) { echo $row->order_id; }
方法 | 返回类型 | 说明 |
---|---|---|
mysqli_fetch_assoc() | 关联数组 | 同PDO::FETCH_ASSOC |
mysqli_fetch_row() | 数字索引数组 | 同PDO::FETCH_NUM |
mysqli_fetch_array() | 混合数组 | 默认包含两种索引 |
mysqli_fetch_object() | 对象 | 同PDO::FETCH_OBJ |
// PDO推荐方式 foreach ($stmt as $row) { // 隐式使用fetch() // 处理数据 } // MySQLi预处理语句 $stmt = $mysqli->prepare("SELECT * FROM logs WHERE type=?"); $stmt->bind_param("s", $type); $stmt->execute(); $result = $stmt->get_result(); while ($log = $result->fetch_assoc()) { // 处理日志 }
// 使用unbuffered查询 $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); // 或使用yield生成器 function fetchBigData($pdo) { $stmt = $pdo->query("SELECT * FROM large_table"); while ($row = $stmt->fetch()) { yield $row; } }
$pdo->beginTransaction(); try { $stmt = $pdo->query("SELECT * FROM accounts FOR UPDATE"); $data = $stmt->fetchAll(); // 处理业务逻辑 $pdo->commit(); } catch (Exception $e) { $pdo->rollBack(); }
fetch()
:适合逐行处理大数据,内存占用低fetchAll()
:适合小数据集,方便数组操作// PDO $meta = $stmt->getColumnMeta(0); echo $meta['name']; // 输出第一列名称 // MySQLi $result->fetch_fields();
SELECT *
LIMIT
分页PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
进行游标控制通过本文的详细介绍,相信您已经掌握了PHP中fetch方法的精髓。根据实际场景选择合适的fetch方式,可以显著提升数据库操作效率和代码可维护性。 “`
注:本文实际约1100字,包含了PDO和MySQLi两种扩展的fetch用法对比、代码示例、性能优化建议等实用内容,采用Markdown格式编写,可直接用于技术文档或博客发布。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。