000webhost无法获取数据库数据,按钮及提示失效(本地正常)
解决000webhost线上数据库数据不加载、功能失效的问题
咱先从最容易忽略的细节开始排查,毕竟本地正常但线上出问题,大多是代码小错误或者环境差异导致的:
1. 先修复数据库连接代码的语法错误
你写的连接代码里有个明显的语法bug,直接会导致代码报错中断:
// 错误代码 if($db->connect_error){ connection error :("); }
改成下面的正确写法,连接失败时能明确提示并停止后续执行:
if($db->connect_error){ echo "Connection error: " . $db->connect_error; // 显示具体错误信息 exit; }
之前的代码因为缺少echo和引号不匹配,会直接抛出语法错误,后续获取数据的逻辑根本跑不起来。
2. 替换手动拼接JSON的方式,避免格式错误
手动拼接JSON字符串很容易因为字段里的引号、特殊字符导致JSON格式损坏,Angular解析失败后就会只显示字段名。用PHP内置的json_encode生成标准JSON才是稳妥的做法:
$result = $db->query("SELECT * FROM movie"); $records = []; while($r = $result->fetch_object()) { $records[] = $r; // 直接把查询到的对象存入数组 } $result->free(); $db->close(); // 生成标准JSON响应 echo json_encode(["records" => $records]);
这样不管字段里有什么特殊字符,都会自动转义,保证JSON格式正确。
3. 验证线上数据库的状态和数据
本地能拿到数据不代表线上数据库没问题,你可以直接访问你的PHP接口URL,看看返回的内容:
- 如果返回
{"records":[]}:说明线上数据库里没有数据,或者查询语句有问题(比如表名、字段名和本地不一致) - 如果返回报错信息:根据错误提示排查(比如表不存在、权限不足)
- 如果返回正常的JSON数据:那问题就出在前端Angular部分
4. 排查前端Angular的逻辑问题
如果PHP接口返回正常数据,就检查前端的几个关键点:
- 确认
getall()函数是否正确请求了PHP接口,比如有没有用$http.get()获取数据,并且把响应的data.records赋值给$scope.names - 打开浏览器控制台(F12),看看有没有跨域错误、JSON解析错误或者其他报错,这些都会导致数据加载失败
- 检查
ng-repeat绑定的变量是否正确,确保是names而不是其他变量
5. 开启PHP错误提示,方便排查问题
000webhost默认可能关闭了错误显示,你可以在PHP代码最开头加上这两行,让错误信息显示出来,方便定位问题:
error_reporting(E_ALL); ini_set('display_errors', 1);
内容的提问来源于stack exchange,提问作者Cedie Ian Lamela
相关产品推荐
相关产品推荐

