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; ?>
额外说明
- PDO连接会在脚本执行结束后自动被PHP回收,手动设置
$conn = null是显式关闭的方式,并非必须,但养成该习惯更规范。 - 移除了无用的mysqli连接代码,避免资源浪费。
- 修改输出格式,用
|分隔字段,让内容更清晰易读。 - 简化结果获取逻辑,直接在
fetchAll()中指定PDO::FETCH_ASSOC,省去单独调用setFetchMode()的步骤。
内容的提问来源于stack exchange,提问作者rotarybean
相关产品推荐
相关产品推荐

