возвращаемый массив php nusoap

Я новичок в веб-сервисах.

Я хочу написать общую функцию на стороне сервера php nusoap, которая может запрашивать (извлекать данные из нескольких таблиц) и возвращать динамический массив в зависимости от результатов, возвращаемых из mysql...

Вот код сервера...

require_once ('../lib/nusoap.php');
$server = new soap_server;
$server->register('getallbook');
function getallbook()
{
$conn = mysql_connect('localhost','root','');
mysql_select_db('apexinventry', $conn);

$sql = "SELECT * FROM users";
$q  = mysql_query($sql);
while($r = mysql_fetch_array($q)){
  $items[] = array('cd'=>$r['id'],'title'=>$r['userid'],'author'=>$r['password'],'publisher'=>$r['groupid']); 
}
return $items;

}

$server->service($HTTP_RAW_POST_DATA);

а вот код клиента......

require_once ('../lib/nusoap.php');

$client = new soapclient('http://127.0.0.1/test/server/index.php');

$response = $client->call('getallbook');

if($client->fault)
{
echo "FAULT: <p>Code: (".$client->faultcode.")</p>";
echo "String: ".$client->faultstring;
}
else
{
$r = $response;
$count = count($r);
?>
<table border="1">
<tr>
    <th>Code</th>
    <th>Title</th>        
    <th>Author</th>        
    <th>Publisher</th>        
</tr>
<?php
for($i=0;$i<=$count-1;$i++){
?>
<tr>
    <td><?php echo $r[$i]['cd'];?></td>
    <td><?php echo $r[$i]['title'];?></td>
    <td><?php echo $r[$i]['author'];?></td>                
    <td><?php echo $r[$i]['publisher'];?></td>        
</tr>
<?php
}
?>
</table>
<?php
}

Какие изменения я должен сделать, чтобы вернуть записи (массив)?


person farhan    schedule 12.07.2011    source источник


Ответы (2)


Как определяется возвращаемое значение в вашей декларации SOAP? Например, вот что у меня есть в моем wsdl:

$server->wsdl->addComplexType('ResultObject',
 'complexType',
 'struct',
 'all',
 '',
      array(
       'result' => array('name' => 'result',
           'type' => 'xsd:string'),
       'addl_info' => array('name' => 'addl_info',
           'type' => 'xsd:string')
      )
);

Вот моя регистрация функции в том же wsdl:

$server->register('addGroupRequest',                // method name
array('auth_name' => 'xsd:string',
    'password' => 'xsd:string',
    'group_objid' => 'xsd:int',         // input parameters
    'source_character_objid' => 'xsd:int',          // input parameters
    'message' => 'xsd:string'),         // input parameters
array('ResultObject' => 'tns:ResultObject'),      // output parameters
'urn:Groupwsdl',                      // namespace
'urn:Groupwsdl#addGroupRequest',                // soapaction
'rpc',                                // style
'encoded',                            // use
'add group request for the character '            // documentation
);

И чтобы получить массив, я просто вызываю $return['addl_info'] или $return['result'].

person tdk2fe    schedule 12.07.2011

вместо возврата $items напишите return array($items)

Если не работает, вы можете обновить $server->register('getallbook') как

$server->register('getallbook',                // method name
    array('return' => 'xsd:string')
);

и изменить вернуться к return array('return'=>$items)

person NA SYD    schedule 10.03.2020