You need to enable JavaScript to run this app. PHP调用get_episode_by_police查询无返回值,$result为空问题求助
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用get_episode_by_police查询无返回值,$result为空问题求助

问题排查及修复方案

核心错误点

  • 参数使用错误:调用get_episode_by_police时传入的是$Ermittler[$x][0](单个字符串值),但方法内部将入参$Ermittler当成数组取$Ermittler[0],实际拿到的是字符串的第一个字符,和预期查询条件完全不符。
  • SQL语句变量解析错误:单引号包裹的SQL语句不会解析PHP变量,语句中的$Ermittler[0]会被当成纯文本而非变量值传入数据库。
  • mysqli_query用法错误:原生mysqli_query仅支持数据库连接+SQL语句两个入参,不支持直接写%s占位符传参,当前写法属于语法错误,直接导致查询失败。
  • 多余的数据库实例化:方法内部重复new mysqli($db)完全多余,外部已经传入了可用的数据库连接$db,重复创建反而可能导致连接冲突。
  • 可选问题:字段名Ertaussstrahlung大概率是拼写错误,德语正确拼写为Erstausstrahlung(首播含义),字段名错误也会导致查询无返回。

修复后的代码

方法实现修复

public function get_episode_by_police($db, $ermittler)
{
    // 用预处理语句防SQL注入,同时解决参数传递问题
    $stmt = mysqli_prepare($db, "SELECT titel, Erstausstrahlung, stadt FROM folge WHERE Ermittler = ?");
    mysqli_stmt_bind_param($stmt, "s", $ermittler);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    
    // 处理查询结果,支持多条数据返回,仅需单条的话可以只调用一次fetch
    $data = [];
    while ($row = mysqli_fetch_assoc($result)) {
        $data[] = $row;
    }
    mysqli_stmt_close($stmt);
    return $data;
}

调用端优化

原代码中循环内每次赋值$result会覆盖上一次的结果,建议用数组存储所有查询结果:

$gateway = new EpisodeGateway();
$db = $gateway->acces_db();
$Ermittler = $gateway->get_hauptkommissar($db);
$allResult = []; // 存储所有查询结果

for($x=0; $x < sizeof($Ermittler); $x++)
{
    echo "<strong>".$Ermittler[$x][0]."</strong>";
    echo "<br>";
    $allResult[] = $gateway->get_episode_by_police($db, $Ermittler[$x][0]);
}

额外排查建议

  • 打开PHP错误提示:在代码顶部加error_reporting(E_ALL); ini_set('display_errors', 1);,可以直接看到语法报错信息,快速定位问题。
  • 每次查询后加错误判断:比如if(!$result) echo mysqli_error($db);可以直接输出数据库返回的错误详情。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:54:02