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

如何使用curl在两台PHP服务端之间传输数据库查询得到的数组数据

问题根因

你直接传递数据库查询返回的$result参数不可行,是因为这个$result本质是数据库结果集对象,不是可直接用于HTTP传输的序列化数据,curl的CURLOPT_POSTFIELDS无法直接解析该对象完成传输。

正确实现代码

服务器1(发送端)修正后代码

public function setDivisions(){
    // 执行数据库查询
    $result = $this->conn->query("SELECT * FROM data_divisions");
    // 从结果集中提取所有数据为二维关联数组
    $data = $result->fetch_all(MYSQLI_ASSOC);
    
    // 构造POST请求参数,对应服务端接收的result字段
    $postFields = [
        'result' => json_encode($data) // 将数组序列化为JSON字符串便于传输
    ];

    $ch = curl_init('https://example.com/api.php?siteid='.$this->site_key);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    // 格式化POST参数为标准表单格式,保证PHP可以正常解析到$_POST
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postFields));
    // 若目标站点是自签SSL证书,可取消注释下面两行避免证书校验报错
    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    
    $response = curl_exec($ch);
    // 可选:请求出错时打印错误信息便于排查
    if(curl_errno($ch)){
        echo 'Curl请求错误:' . curl_error($ch);
    }
    curl_close($ch);
    print_r($response);
}

服务器2(接收端)修正后代码

// 接收POST参数并将JSON字符串反序列化为数组
$array = json_decode($_POST['result'], true);
// 遍历数组执行入库逻辑
foreach ($array as $item) {
    // 这里写你的入库代码,通过$item['对应字段名']即可取到每条数据的值
}
注意事项
  • 如果查询数据量极大,建议分页分批传输,避免触发服务器POST大小限制、请求超时等问题
  • 接口建议加签名校验逻辑,避免被恶意调用传入非法数据
  • 入库前务必对接收的数据做校验和过滤,避免SQL注入等安全风险

内容的提问来源于stack exchange,提问作者Mārcis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:05