store.load({
params: {
start: 0,
limit: 1000,
proc_nm: 'sel_bkng_srch',
test_parms1: [
{'parm_val_var1':1, 'parm_val_var1':2}
],
srchStrng: '',
test_parms2: JSON.stringify(parm_val_var1, parm_val_var1),
connId: 'AW'
} ....
test_parms1
和test_parms 2
试图将某种数组/对象作为存储过程参数传入php,而不必单独列出它们。我的所有尝试都以PHP作为[object object]或仅作为第一个值结束。以为我有这一切工作,但我只发送1个参数,它完美地工作。什么是正确的语法? TIA。
答案 0 :(得分:0)
>>> d1 = {'a': 1, 'b':2}
>>> d2 = {'a':2, 'b': 2, 'c':3}
>>> diff = set(d1.items()).symmetric_difference(d2.items())
>>> diff
{('a', 2), ('c', 3), ('a', 1)}
>>>
代表数组。
[]
数组。
[1,2,3,]
代表对象。
{}
是具有键值对的3个对象数组的示例。
尝试更改[{"as":1},{"asa":2},{"sd":3}]
为
[ {'parm_val_var1':1, 'parm_val_var1':2}]
,它基本上是Json对象的数组,其中每个对象都有一个键值对。
对于下面给出的json,元素将被访问为:
[{"parm_val_var1":1}, {"parm_val_var1":2}]
{"abc":[{"as":1},{"asa":2},{"sd":3}]}
请注意我已将'(单引号)替换为“(双引号)。它是JSON standard
答案 1 :(得分:0)
store.load({
params: {
start: 0,
limit: 1000,
proc_nm: 'sel_bkng_srch',
test_parms2: JSON.stringify([dnStrng, mtStrng, dtFromStrng, dtToStrng]),
connId: 'AW'
}, ....
然后在php:
$proc_parms = json_decode($_REQUEST['test_parms2']);
$procNm = $_REQUEST['proc_nm'];
$proc_parms_ar = array();
$i = 0;
foreach($proc_parms as $val) {
flog("val = %s", $val);
array_push($proc_parms_ar,array($proc_parms[$i], 1));
$i++;
}
$tsql_callSP = "{call " . $procNm . "( ?, ?, ?, ?)}";
/* Execute the query. */
$stmt = sqlsrv_query( $conn, $tsql_callSP, $proc_parms_ar);
这将获取parms列表并创建一个sqlsrv所需的数组,其中'parm1,1'定义一个输入参数,然后调用ExtJS存储请求的SQLServer存储过程。 $ tsql_callSP需要从parms数组构造,所以'?'为每个参数添加。