php与MariadB调用存储过程使用JSON_ARRAYAGG JSON_OBSTRUCTURE返回数据,但也查询(?)

iugsix8n  于 12个月前  发布在  PHP
关注(0)|答案(1)|浏览(104)

mariaDB存储过程

CREATE DEFINER=`user`@`localhost` PROCEDURE `db`.`test`(IN STR varchar (128))
BEGIN
     SELECT JSON_ARRAYAGG(JSON_OBJECT('AMNT', AMNT) ) FROM BOMI AS RES;
END

字符串
PHP在函数中调用如下:

mysqli_query($link ,"SET @p0='".$param1."'");
mysqli_multi_query ($link, "CALL test(@p0)") OR DIE (mysqli_error($link));
$data = [];
if ($result = mysqli_store_result($link)) 
{
   while ($row = mysqli_fetch_assoc($result)) 
   {
      $data[] = $row;
   }
}
return array ($status, $code, $message, $data);


调用者打印数据:

echo json_encode($data, JSON_UNESCAPED_SLASHES);


$data中返回的数据作为3条记录的数组是正确的
虽然[Q1]的结果有查询本身作为前缀。这是正确的吗?

`[{"JSON_ARRAYAGG(JSON_OBJECT('AMNT', AMNT) )":"[{\"AMNT\": 1.0000},{\"AMNT\": 1.0000},{\"AMNT\": 1.0000}]"}]
`


[Q2]数据有反斜杠。(是的,用stripslashes()的(hack)可以工作,但是,如何避免?)
MariaDB Ver 15.1 Distrib 10.11.2-MariaDB,for debian-linux-gnu(x86_64)using EditLine wrapper PHP 8.1.12-1ubuntu4.3(编译:Aug 17 2023 17:37:48)(NTS)
预期:

'"[{"AMNT": 1.0000},{"AMNT": 1.0000},{"AMNT": 1.0000}]"}]'

2guxujil

2guxujil1#

感谢您的提示。更改如下:

查询

SELECT JSON_ARRAYAGG(JSON_OBJECT('AMNT', AMNT) AS RESULT ) FROM BOMI;

字符串
我使用printn_r(),输出如下:

输出

Array
(
    [0] => Array
        (
            [RESULT] => [{"AMNT": 1.0000},{"AMNT": 1.0000},{"AMNT": 1.0000}]
        )
)


当我使用这个:

$data = $data[0]["RESULT"];


那么输出是这样的:

[{"AMNT": 1.0000},{"AMNT": 1.0000},{"AMNT": 1.0000}]

相关问题