php - PHP 7.2 - SQL Server 2017 - 创建嵌套数组响应
问题描述
我有一个从 SQL Server 数据库中检索数据的存储过程。
使用查询结果,我需要填充 SOAPClient 方法的参数数组
目前我正在手动创建数组,但我想知道是否可以(并且值得)直接从 TSQL 以 SOAP 方法所需的方式创建数组:
使用 PHP 7.2 - SQL Server 2017
让我用一个例子来解释一下:这是我的查询结果:
Array
(
[Key] => R******l
[Password] => c*************z
[AccountNumber] => 0****1
[MeterNumber] => 2******5
[ShipTimestamp] => 2020-10-29T10:24:19+01:00
[ServiceType] => INTERNATIONAL_ECONOMY
[PackagingType] => YOUR_PACKAGING
[PreferredCurrency] => EUR
[Weight_Units] => KG
[TotalWeight] => 0.02
...
)
虽然它应该返回如下内容:
Array
(
[Authentication] => Array
(
[User] => Array
(
[Key] => R******l
[Password] => c*************z
)
)
[Client] => Array
(
[Account] => 0*******1
[Meter] => 2*******5
)
[Shipment] => Array
(
[ShipTimestamp] => 2020-10-29T10:41:26+01:00
[DropoffType] => REGULAR_PICKUP
[ServiceType] => INTERNATIONAL_ECONOMY
[PackagingType] => YOUR_PACKAGING
[PreferredCurrency] => EUR
[TotalWeight] => Array
(
[Units] => KG
[Value] => 0.02
)
)
...
)
有可能而且值得吗?
解决方案
您可以在 SQL 和 PHP 3中使用FOR JSON PATH
1返回一行和一个 JSON 列,并将参数设置为将 JSON 解码为数组。json_decode($json, true)
$assoc
true
SELECT (
SELECT user_key [Authentication.User.Key]
, user_password [Authentication.User.Password]
, client_account [Client.Account]
, client_meter [Client.Meter]
--- and so on
FROM my_table
FOR JSON PATH
) [json]
结果应该是 JSON
{
"Authentication": { "User": { "Key": "XXX", "Password": "XXX" } },
"Client": { "Account": "YYY", "Meter": 200500 }
}
现在您可以在 PHP 中获取该值,对其进行解码并提供给 SOAP。
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
$json = json_decode($row['json'], true);
但在 SQL 中,您需要一种特殊的语法来格式化这些类型:
- 日期值
CONVERT(varchar(10), date_col, 120)
-120
结果2020-10-29 11:32:00
格式,varchar(10)
仅修剪日期部分,varchar(20)
获取整个日期+时间2 - 布尔值
CAST(boolean_col as bit)
(0 -> false
,1 -> true
)
更多信息:
推荐阅读
- java - 是否可以在 gradle 中隐藏/隔离所有实现依赖项?
- firebase - 如何在firebase托管上使用node.js处理根路径请求?
- javascript - 如何通过限制每个函数来创建嵌套列表?
- kubernetes - Kubernetes 中使用 Grafana 的 OAuth2 - 配置
- random - 无法创建抽象类的实例(随机)
- html - 如何使用css根据其他元素的状态设置div中元素的状态
- angular - 如何检查Angular 7中两个不同的子下拉菜单是否具有相同的值?
- react-native - React Native 选择器在值更改后重置
- regex - 按照模式 +[0..9] 从字母数字字符串中查找数字组
- wordpress - 元查询在 WP 中被忽略