Web services while循环PHP/MySQL NuSOAP时出错
我创建了一个基于PHP/MySQL的web服务。如前所述,我编写了client.php 和server.php,如下所示:Web services while循环PHP/MySQL NuSOAP时出错,web-services,nusoap,mysql5,Web Services,Nusoap,Mysql5,我创建了一个基于PHP/MySQL的web服务。如前所述,我编写了client.php 和server.php,如下所示: <?php require_once("lib/nusoap.php"); $host = $_SERVER['HTTP_HOST']; $miURL = 'http://'.$host.'/WS-Demo'; $server = new nusoap_server(); $server->configureWSDL('L3M_WebSer
<?php
require_once("lib/nusoap.php");
$host = $_SERVER['HTTP_HOST'];
$miURL = 'http://'.$host.'/WS-Demo';
$server = new nusoap_server();
$server->configureWSDL('L3M_WebService', $miURL);
$server->wsdl->schemaTargetNamespace=$miURL;
$server->register('getDemoData',
array('fldpara' => 'xsd:Array', 'tblpara' => 'xsd:Array', 'cndpara' => 'xsd:Array'),
array('return' => 'xsd:string'),
$miURL);
function decryptRJ256($string_to_decrypt)
{
$key = 'salt_key - I';
$iv = 'salt_key - II';
$string_to_decrypt = base64_decode($string_to_decrypt);
$rtn = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_decrypt, MCRYPT_MODE_CBC, $iv);
$rtn = rtrim($rtn, "\4");
return($rtn);
}
function encryptRJ256($string_to_encrypt)
{
$key = 'salt_key - I';
$iv = 'salt_key - II';
$rtn = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_encrypt, MCRYPT_MODE_CBC, $iv);
$rtn = base64_encode($rtn);
return($rtn);
}
function getDemoData($flds, $tbls, $cnds){
$mysqli = new mysqli("localhost", "root", "", "test");
for($i=0;$i< count($flds); $i++) {
$flds[$i] = decryptRJ256($flds[$i]);
}
for($i=0;$i< count($tbls); $i++) {
$tbls[$i] = decryptRJ256($tbls[$i]);
}
for($i=0;$i< count($cnds); $i++) {
$cnds[$i] = decryptRJ256($cnds[$i]);
}
if(! empty($flds)) {
$what = implode(", ", $flds);
} else {
$what = "*";
}
if(! empty($tbls)) {
$from = implode(", ", $tbls);
}else {
$err = 1;
}
if(! empty($cnds)) {
$cond = " WHERE ";
$cond .= $cnds[0] . " = '" . $cnds[1] . "'";
} else {
$cond = "";
}
$sql = "SELECT ".$what." FROM ".$from . $cond;
$rsGetData = $mysqli->query($sql);
$responseData = '<?xml version="1.0" encoding="UTF-8"?>
<L3MDataSets>';
while($rowGetData = $rsGetData->fetch_assoc()) {
$responseData .= '<L3DataSet>';
foreach($rowGetData as $k => $v) {
$responseData .= '<' . $k . '>' . $v . '</' . $k . '>';
}
$responseData .= '</L3DataSet>';
}
$responseData .= '</L3MDataSets>';
$responseData = encryptRJ256($responseData);
$responseString = new soapval('return', 'xsd:string', $responseData );
return $responseData;
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
fetch_assoc()){
$responseData.='';
foreach($rowGetData作为$k=>$v){
$responseData.=''.$v';
}
$responseData.='';
}
$responseData.='';
$responseData=encryptRJ256($responseData);
$responseString=newsoapval('return','xsd:string',$responseData);
返回$responseData;
}
$HTTP\u RAW\u POST\u DATA=isset($HTTP\u RAW\u POST\u DATA)$HTTP_原始_POST_数据:“”;
$server->service($HTTP\u RAW\u POST\u数据);
?>
从上述getDemoData函数中的代码中,如果我删除while循环,它将给出正确的输出。但是,当我返回while循环时,它将我的输出显示为“-Error:Response不是text/xml:text/html类型”,即使SQL查询是正确的。我已经复制并粘贴了在phpMyAdmin中工作的生成的SQL查询。您是否可以打印
$SQL
及其关联的$rsGetData->fetch_assoc()
问题可能出在变量$k
,$v
分别作为最后SOAP/XML
消息的标记和值。一个好的起点是为循环的每次迭代打印这些变量,检查相同的no hope。这给了我同样的错误(检查L3MDataset在循环中是否与$k和$v的输出冲突,并且查看一些示例输出也会有所帮助。此外,如果仅在维护循环时发生这种情况,正如@pankar所暗示的,问题似乎在于$k和$v值。可能它们有反斜杠字符或生成格式不正确的xml。同样,看到一些失败的输出会非常棒。为什么要创建$responseString
,然后立即返回$responseData
?另外,$k
是否都是有效的XML标记名?