PHP Webservice返回空结果求助:MySQL视频列表无法获取
排查PHP接口返回空视频列表的问题
我之前遇到过类似的情况,你的代码逻辑看起来没大问题,但有几个容易被忽略的细节可能导致这个现象,一步步来排查:
1. 先确认数据库查询是否真的执行成功
你的getAllVideos方法里,如果$this->conn->query()执行失败(比如语法错误、连接异常),会直接跳过结果处理并返回空数组,但你没有捕获这个错误,根本不知道查询有没有出问题。可以修改方法,加上错误日志和失败判断:
public function getAllVideos(){ $videos = array(); // 先检查数据库连接是否有效 if(!$this->conn){ error_log("数据库连接失败: " . $this->conn->error); return false; } $result = $this->conn->query("SELECT * FROM tbl_videos"); if ($result) { // 先打印行数,确认是否有数据返回 error_log("查询到的视频行数: " . $result->num_rows); while ($row = $result->fetch_assoc()) { $row_array["tbl_videos_id"] = $row['tbl_videos_id']; $row_array["video_path"] = $row['video_path']; $row_array["title"] = $row['title']; $row_array["description"] = $row['description']; $row_array["video_cover_path"] = $row['video_cover_path']; array_push($videos, $row_array); } $result->free(); return $videos; } else { // 捕获查询错误,写入日志 error_log("查询失败: " . $this->conn->error); return false; } }
然后查看服务器的PHP错误日志,或者在接口开头临时开启错误输出:
error_reporting(E_ALL); ini_set('display_errors', 1);
这样就能知道查询是真的没数据,还是执行过程中出了故障。
2. 检查数据库连接的一致性
你在phpMyAdmin能查到数据,但PHP代码可能连接到了不同的数据库(比如测试库和生产库搞混了),或者使用的数据库用户没有SELECT权限。可以在DB_Functions的连接代码里,打印当前连接的数据库名:
// 数据库连接完成后添加 echo "当前连接的数据库: " . $this->conn->select_db("你的数据库名称");
确认和phpMyAdmin操作的是同一个库。
3. 检查字符集匹配问题
如果数据库的字符集和PHP连接时的字符集不匹配,可能会导致查询结果为空(尤其是表名/字段名包含特殊字符时)。在数据库连接成功后,添加字符集设置:
$this->conn->set_charset("utf8mb4"); // 根据你的数据库实际字符集调整,比如utf8
4. 调试接口返回的具体内容
在get_all_videos.php里,先打印$videos的内容,看看是不是真的为空:
$videos = $db -> getAllVideos(); var_dump($videos); // 临时添加,测试后删除
如果var_dump显示有数据,但json输出为空,可能是数据里有无法序列化的字符,这时候可以给json_encode加上参数:
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_PARTIAL_OUTPUT_ON_ERROR);
按照这些步骤排查,应该能快速定位问题所在。
内容的提问来源于stack exchange,提问作者Sandip Armal Patil
相关产品推荐
相关产品推荐

