You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP通过PDO查询MySQL数据报错:PDO::close()方法未定义求助

问题分析与修复方案

核心错误

报错Fatal error: Uncaught Error: Call to undefined method PDO::close()的原因是:PDO类不存在close()方法,你误用了mysqli的连接关闭方式来处理PDO连接。

代码中的其他问题

  • 混用mysqli和PDO两种数据库连接方式:开头用mysqli_connect()创建的连接完全未被使用,后续被PDO连接覆盖,属于冗余代码,会浪费服务器资源。
  • 输出内容无分隔空格,最终显示的字段会挤在一起(例如Part #: 123Part Description: ...),可读性极差。

修复后的完整代码

<?php
$servername = "[local IP:port]";
$username = "[sql username]";
$password = "[sql password]";
$databasename = "labeling";

// SQL 查询语句
$query = "SELECT partnum, partdesc, colorant, material, quantity, monum, boxnum FROM `press01`";

try 
{
    // 初始化PDO连接
    $conn = new PDO(
        "mysql:host=$servername;dbname=$databasename", 
        $username, $password);

    // 设置PDO错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare($query);
    $stmt->execute();

    // 直接在fetchAll时指定关联数组获取模式,简化代码
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // 循环输出数据,添加分隔符提升可读性
    foreach ($result as $row) 
    {
        echo "Part #: " . $row["partnum"] . " | Part Description: " . 
             $row["partdesc"] . " | Color: " . $row["colorant"] . " | Material: " .
             $row["material"] . " | Box Quantity: " . $row["quantity"] . " | MO#: " . $row["monum"] .
             " | Box #: " . $row["boxnum"] . "<br>";
    }
} catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

// 关闭PDO连接的正确方式:将连接变量赋值为null
$conn = null;
?>

额外说明

  1. PDO连接会在脚本执行结束后自动被PHP回收,手动设置$conn = null是显式关闭的方式,并非必须,但养成该习惯更规范。
  2. 移除了无用的mysqli连接代码,避免资源浪费。
  3. 修改输出格式,用|分隔字段,让内容更清晰易读。
  4. 简化结果获取逻辑,直接在fetchAll()中指定PDO::FETCH_ASSOC,省去单独调用setFetchMode()的步骤。

内容的提问来源于stack exchange,提问作者rotarybean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25