mysqli查询本地正常主机无结果,求助问题原因与解决方法
问题描述
本地环境运行PHP代码时,mysqli查询结果能正常显示,但部署到主机后查询结果无法显示。
相关代码:
$squery = $config->prepare("SELECT * FROM kbm WHERE nama=? ORDER by tanggal DESC LIMIT ?, ?"); $squery->bind_param("sii", $nama, $curr, $limit); $squery->execute(); $query = $squery->get_result(); $sqdata = $config->prepare("SELECT * FROM kbm WHERE nama=?"); $sqdata->bind_param("s", $nama); $sqdata->execute(); $qdata = $sqdata->get_result();
结果获取方式:
while($row = $query->fetch_assoc()){ // 处理结果逻辑 }
最初怀疑是PHP版本问题,参考PHP 8.2相关mysqli特性修改后,问题仍未解决。
可能的原因及排查方案
主机mysqlnd驱动未启用
部分共享主机默认没开启mysqlnd驱动,而get_result()依赖这个驱动才能正常工作。可以在主机上创建phpinfo文件,查看mysqlnd是否在已加载扩展列表中。如果没有,要么联系主机商开启,要么改用bind_result()替代,示例代码:$squery = $config->prepare("SELECT id, nama, tanggal FROM kbm WHERE nama=? ORDER by tanggal DESC LIMIT ?, ?"); $squery->bind_param("sii", $nama, $curr, $limit); $squery->execute(); $squery->bind_result($id, $nama, $tanggal); while ($squery->fetch()) { // 直接使用绑定的变量处理数据 }变量值或数据匹配问题
本地和主机环境的$nama、$curr、$limit变量值可能不一致,比如主机上$nama为空或数据库中无对应记录。可以在代码中加入调试输出:var_dump($nama, $curr, $limit); // 查看变量实际值 echo $squery->error; // 输出查询执行错误信息执行后根据输出确认变量是否正确,以及查询是否存在语法或权限错误。
数据库连接与数据一致性问题
检查主机的数据库连接配置(地址、用户名、密码、库名)是否正确,确保连接的是目标数据库。同时确认主机上的kbm表结构、数据是否和本地一致,比如是否存在nama字段、数据是否已同步。字符编码不匹配
本地和主机数据库字符编码不一致,会导致nama字段匹配失败。可以在数据库连接初始化后强制设置字符集:$config->set_charset("utf8mb4");
内容的提问来源于stack exchange,提问作者M. Agus Tri Mulyono
相关产品推荐
相关产品推荐

