程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP - MS SQL Server 从 PHP 代码传递 xml 参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决php - MS SQL Server 从 php 代码传递 xml 参数?

开发过程中遇到php - MS SQL Server 从 php 代码传递 xml 参数的问题如何解决?下面主要结合日常开发的经验,给出你关于php - MS SQL Server 从 php 代码传递 xml 参数的解决方法建议,希望对你解决php - MS SQL Server 从 php 代码传递 xml 参数有所启发或帮助;

我正在使用带有 php 的 MS sql Server,并且 sql Server 存储过程中的列之一是 xml 类型。我在 php 中运行 foreach 语句来迭代数组值并创建一个带有 xml 标记的字符串并将字符串变量传递给 loadXML 和 saveXML。我可以在日志中看到类型为字符串的输出。

要创建的 XML 格式:

'<paramList><i v=".Production"/><i v="IFT"/></paramList>'

用于创建 XML 标签的 php 代码

            $create_env = array();
            if(is_array($this->env_ref)) {
               $env_values = array_values($this->env_ref);
               foreach($env_values as $k => $v) {
                   $create_env[] = array("ID" => $v);
               }
               $env_args = $create_env;

               $env_xml_args = '<paramList>';
               foreach($env_args as $p) {
                 foreach($p as $_p => $_q) {
                   $modify_env  = strpos($_q,".",0);
                     if($modify_env !== falsE) {
                        $modify_env = $modify_env + 1;
                        $extract_env = substr($_q,$modify_env,strlen($_q));
                     } else {
                         $extract_env = $_q;
                     }
                     $env_xml_args .= '<i v='."'".$extract_env."'".'/>';
                 }
               }
               $env_xml_args .= '</paramList>';
            }
            $env_str_args = $env_xml_args;

            $t_xml = new DOMdocument();
            $t_xml->loadXML($env_str_args);
            $env_args = $t_xml->saveXML($t_xml->documentElement);

php中执行的存储过程:

            $session_search      = array();
            $this->dbinstance    = $instance;
            $this->formatter     = "{Call %s.%s.%s(?)}";
            $this->sessionSearch = sprintf($this->formatter,db_name,DB_owneR,SEARCH);

            $sql = $this->sessionSearch;

            $args = array($event_ID_args,$proj_args,$event_name_args,$emp_args,$snap_ticket_args,$start_period_dt_args,$finish_period_dt_args,$is_archived_args,$sort_order_args,$publish_flag_args,$is_archived_proj_args,$IDentity_ID_args,$env_args,$state_args);

            error_log(var_dump($args));

            $searchStatement = sqlsrv_prepare($this->dbinstance,$sql,$args);

            if(!$searchStatement) {
               return false;
            }

            $searchExecuteStatement = sqlsrv_execute($searchStatement);

            if(!$searchExecuteStatement) {
               return false;
            } else {
                while($rows = sqlsrv_fetch_array($searchStatement,sqlSRV_FETCH_ASSOC))
                {
                 $session_search[]     = array("event_ID" => $rows["ID"],"event_name" => $rows["name"],"event_date_from" => $rows["start"],"event_date_to" => $rows['finish'],"event_project_ID" => $rows["PROjeCTID"],"event_env_ID" => $rows["ENVID"],"event_notes" => $rows["notes"],"event_epm" => $rows["epmname"]);
                }
            }
            sqlsrv_free_stmt($searchStatement);
            sqlsrv_close($this->dbinstancE);

            return $session_search;

php var_dump 输出:

String(55) "<paramList><i v=".Production"/><i v="IFT"/></paramList>"

存储过程执行没有任何错误并返回所有结果集。当我在 sql 服务器管理工​​具中使用静态输入执行存储过程时,如上所示,它只检索输入的匹配记录。

我对 sql Server 了解不多,因为我之前只使用 MysqL 作为 php 的后端。任何人都可以提供有关如何将 XML 作为输入传递给列的解决方案的帮助。

解决方法

我自己修好了。问题是,当 INPUT 传递给存储过程时,SQL 存储过程需要键和值。我只是传递值。

大佬总结

以上是大佬教程为你收集整理的PHP - MS SQL Server 从 PHP 代码传递 xml 参数全部内容,希望文章能够帮你解决PHP - MS SQL Server 从 PHP 代码传递 xml 参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。