PHP-SOAP-Client und-Server

Ich bin versucht zu schreiben, dass meine erste SOAP-server, nachdem Sie es getan hat ein wenig mit SOAP-clients.
Wenn ich versuchte, mit einer Zusendung einer einzigen saite, das funktionierte gut. Aber wenn man versucht zu senden mehrerer Parameter an den server komme ich mit Köpfchen fahren. Gibt es eine bessere Methode für die Bekämpfung dieser?

Server:

<?php    
if(!extension_loaded("soap")){
    dl("php_soap.dll");
}
ini_set("soap.wsdl_cache_enabled","0");

function getCatalogEntry($array){
$conn = mysqli_connect($host,$user,$password,$db) or die(mysqli_error($conn));
$sql = "SELECT '" . $array[0]. "' FROM soap WHERE id = '".$array[1]."'";


$result = $conn->query($sql) or die(mysqli_error($conn));
$row = mysqli_fetch_array($result);
    return var_dump($array).$array[0];//$sql.$row[$field];
}

$server = new SoapServer("test.wsdl");
$server->AddFunction("getCatalogEntry");
$server->handle();
?>

Client:

<?php
try{
    $sClient = new SoapClient('server.php?wsdl');

    $params = array( 
        "field" => "field2",
        "id" => "id"); 

    $response = $sClient->getCatalogEntry($params);

    var_dump($response);


} catch(SoapFault $e){
    var_dump($e);
}
?>

WSDL:

<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='Catalog'
  targetNamespace='http://example.org/catalog'
  xmlns:tns=' http://example.org/catalog '
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
  xmlns:xsd='http://www.w3.org/2001/XMLSchema'
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
  xmlns='http://schemas.xmlsoap.org/wsdl/'>

  <xsd:complexType name="KeyValueData">
<xsd:sequence>
  <xsd:element minOccurs="1" maxOccurs="1" name="id" type="string"/>
  <xsd:element minOccurs="1" maxOccurs="1" name="field" type="string"/>
</xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ArrayOfKeyValueData">
<xsd:sequence>
  <xsd:element minOccurs="0" maxOccurs="unbounded"
           name="keyval" type="tns:KeyValueData"/>
</xsd:sequence>
  </xsd:complexType>

  <message name='getCatalogRequest'>
    <part name='catalogId' type='ArrayOfKeyValueData'/>
  </message>
  <message name='getCatalogResponse'>
    <part name='Result' type='xsd:string'/>
  </message>

  <portType name='CatalogPortType'>
    <operation name='getCatalogEntry'>
      <input message='tns:getCatalogRequest'/>
          <output message='tns:getCatalogResponse'/>
        </operation>
      </portType>

      <binding name='CatalogBinding' type='tns:CatalogPortType'>
    <soap:binding style='rpc'
      transport='http://schemas.xmlsoap.org/soap/http'
  />
    <operation name='getCatalogEntry'>
      <soap:operation soapAction='urn:localhost-catalog#
    getCatalogEntry'/>
      <input>
        <soap:body use='encoded' namespace=
      'urn:localhost-catalog'
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
      </input>
      <output>
        <soap:body use='encoded' namespace=
   'urn:localhost-catalog'
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
      </output>
    </operation>
  </binding>

  <service name='CatalogService'>
    <port name='CatalogPort' binding=
  'CatalogBinding'>
      <soap:address location='server.php'/>
    </port>
  </service>
</definitions>
Was ist Ihr output? Es gibt zwei var_dumps also, was sind Sie Eingang?
Von diesem bekomme ich string(1) "A" ich glaube nicht, dass das var_dump in die server-Funktion ist die Ausgabe etwas
Sie sollten verwenden Sie eine vorbereitete Anweisung (php.net/manual/en/mysqli.prepare.php) anstelle von verketten von teilen der Anfrage mit raw-SQL.

InformationsquelleAutor Chris Crawshaw | 2012-12-10

Schreibe einen Kommentar