如何使用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
相关产品推荐
相关产品推荐

