You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的PHP函数出现pg_execute与pg_num_rows参数错误?

解决pg_execute和pg_num_rows的参数错误

错误根源

  • pg_execute() 参数错误:你把pg_prepare()的返回值(布尔值)传给了pg_execute的第二个参数,但pg_execute需要的是准备语句的名称字符串(也就是你定义的"display_calls"),传值错误导致参数类型不匹配。
  • pg_num_rows() 报错是因为前面pg_execute执行失败返回了null,传入无效参数触发报错。
  • 额外问题:pg_fetch_result里用的字段名和SQL查询的字段名不匹配,会导致取不到数据。

修复步骤及代码

  1. 修正pg_execute的参数:直接用准备语句的名称字符串"display_calls",而非$display_calls变量(这个变量存的是pg_prepare的执行结果,不是语句名)。
  2. 匹配字段名:SQL查询的是firstName、lastName、callDate,pg_fetch_result里要对应这些字段名,不能用自定义的别名。
  3. 移除无效代码:return $output;之后的echo $output;永远不会执行,直接删除。
  4. 添加错误处理:检查pg_prepare和pg_execute的执行结果,避免后续函数因无效值报错。

修复后的完整代码:

// 预处理SQL语句,$prepare_success存的是执行结果(true/false),无需在函数中调用
$prepare_success = pg_prepare($conn, "display_calls", "SELECT clients.firstName, clients.lastName, callLogs.callDate FROM clients INNER JOIN callLogs ON clients.id=callLogs.Clients_id");

// 检查预处理是否成功
if (!$prepare_success) {
    die("预处理语句失败: " . pg_last_error($conn));
}

function display_logs() {
    global $conn;
    $output = "";

    // 调用pg_execute,第二个参数是准备语句名称,第三个参数为绑定参数(无参数则传空数组)
    $result = pg_execute($conn, "display_calls", []);

    // 检查查询执行是否成功
    if (!$result) {
        die("执行查询失败: " . pg_last_error($conn));
    }

    $records = pg_num_rows($result);
    for($i = 0; $i < $records; $i++){
        $output .= "
        <tr>
            <td>".pg_fetch_result($result, $i, "firstName")."</td>";
        $output .= "
            <td>".pg_fetch_result($result, $i, "lastName")."</td>";
        $output .= "
            <td>".pg_fetch_result($result, $i, "callDate")."</td>
        </tr>";
    }
    return $output;
}

额外说明

  • pg_prepare()的返回值是布尔值(成功返回true,失败返回false),不是语句资源,所以不需要把它传给pg_execute,pg_execute只需要知道语句的名称字符串。
  • 如果SQL需要绑定参数(比如SELECT ... WHERE id = $1),pg_execute的第三个参数就是[$id]这样的数组,用来替换占位符。
  • 全局变量$conn的使用可以改成参数传递,让代码更健壮,避免依赖全局变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:20:52