PHP上传数据到SQLServer接口实例(亲测)

PHP上传数据到SQLServer,以下运用sqlsrv函数实现

1.首先确认是否已经打开sqlsrv拓展(phpinfo)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210110111951102.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1YW5kZXI2NjY=,size_16,color_FFFFFF,t_70

2.话不多说,直接上代码

<?php

namespace app\spb\controller;

use think\Controller;
use think\Db;

class Uploadtest
{
	public function index()
	{
		// 查询需要上传的数据
		$data = Db::name('remote_detection')
			->where(['second_synchronise' => '2'])
			->order('id asc')
			->limit('10')
			->select();
		// 服务器ip地址
		$ip = "192.168.1.21";
		// 配置数据库名 用户名 密码
		$conninfo = array("Database" => "lnyk", "UID" => "sa", "PWD" => "care-2014");
		// 连接数据库
		$conn = sqlsrv_connect($ip, $conninfo);
		if ($data) {
			// 连接成功
			if ($conn != false) {
				$i = 0; // 当次同步的总数量
				$j = 0; // 成功插入的数量
				$fail = []; //发生异常的数据
				$success = []; // 成功同步的数据id

				foreach ($data as $row) {
					$i++;
					// 汉字转码
					$row['car_number'] = iconv('UTF-8', 'GBK', $row['car_number']); // 车牌号
					$row['item_name'] = iconv('UTF-8', 'GBK', $row['item_name']); // 物资名称
					$row['receiving_company_name'] = iconv('UTF-8', 'GBK', $row['receiving_company_name']); // 收货单位
					$row['send_company_name'] = iconv('UTF-8', 'GBK', $row['send_company_name']); // 发货单位
					// 准备数据
					$pre_data['id'] = $row['id']; // 主键id
					$pre_data['car_number'] = $row['car_number']; //车牌号
					$pre_data['item_name'] = $row['item_name']; // 物资名称
					$pre_data['send_company_name'] = $row['send_company_name']; // 发货单位
					$pre_data['receiving_company_name'] = $row['receiving_company_name']; //收货单位
					$pre_data['first_check_weight'] = $row['first_check_weight']; // 一检重量
					$pre_data['second_check_weight'] = $row['second_check_weight']; // 二检重量
					$pre_data['first_check_time'] = date('Y-m-d H:i:s', $row['first_check_time']); // 一检时间
					$pre_data['second_check_time'] = date('Y-m-d H:i:s', $row['second_check_time']); // 二检时间
					// 添加数据(采用原生语法进行拼接数据)
					$insert_data = "INSERT INTO [lnyk].[dbo].[gcz] (
						[bdxh], 
						[ch], 
						[hm], 
						[ssq], 
						[ssdw], 
						[mz], 
						[pz], 
						[mztime], 
						[pztime]
					) 
					VALUES (
						'" . $pre_data['id'] . "',
						'" . $pre_data['car_number'] . "',
						'" . $pre_data['item_name'] . "',
						'" . $pre_data['send_company_name'] . "',
						'" . $pre_data['receiving_company_name'] . "',
						'" . $pre_data['first_check_weight'] . "',
						'" . $pre_data['second_check_weight'] . "',
						'" . $pre_data['first_check_time'] . "',
						'" . $pre_data['second_check_time'] . "'
					)";
					$result = sqlsrv_query($conn, $insert_data);
					if ($result!=false) {
						// 更新上传状态
						Db::name('remote_detection')->where(['id' => $row['id']])->update(['second_synchronise' => '1']);
						$j++;
						$success[] = $row['id'];
					} else {
						$fail[] = $row['id'];
					}
				}
				if ($i == $j) {
					$this->json_return(['code' => '0', 'msg' => '上传成功', 'data' => $success]);
				} else {
					$this->json_return(['code' => '101', 'msg' => '上传发生异常', 'data' => $fail]);
				}
			} else {
				$this->json_return(['code' => '102', 'msg' => '数据库连接失败', 'data' => '']);
			}
		} else {
			$this->json_return(['code' => '103', 'msg' => '没有新的数据', 'data' => '']);
		}
	}
	// 返回json数据
	public function json_return($result, $type = 'JSON')
    {
        if (strtoupper($type) == 'JSON') {
            // 返回JSON数据格式到客户端 包含状态信息
            header('Content-Type:application/json; charset=utf-8');
            exit(json_encode($result));
        } elseif (strtoupper($type) == 'XML') {
            // 返回xml格式数据
            header('Content-Type:text/xml; charset=utf-8');
            exit(xml_encode($result));
        } elseif (strtoupper($type) == 'EVAL') {
            // 返回可执行的js脚本
            header('Content-Type:text/html; charset=utf-8');
            exit($result);
        } else {
            // TODO 增加其它格式
            exit($result);
        }
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值