R: [phpxmlrpc] DB result and array

Gaetano Giunta giunta.gaetano at sea-aeroportimilano.it
Tue Jul 22 11:10:24 BST 2003


Uhm, the code looks somewhat broken, as far as I can tell.
Comments below (in italiano)

> -----Messaggio originale-----
> Da: phpxmlrpc-bounces at usefulinc.com
> [mailto:phpxmlrpc-bounces at usefulinc.com]Per conto di TeddyZ
> Inviato: lunedi 21 luglio 2003 22:27
> A: phpxmlrpc at usefulinc.com
> Oggetto: [phpxmlrpc] DB result and array
> 
> 
> Hi, sorry for my english..i'm going to expose you what's my problem.
> I have client and server . the client call a method . this 
> method retrieve 
> values from a mysql db but i can't see these values. i'm very 
> newbie :|
> 
> here is my code, i thing i'm in error with the array of my 
> method...can you 
> help me please?
> sorry for the stupid question (i think..uhm..i'm sure)
> bye!
> 
> client.php
> 
> 
> include("xmlrpc.inc");
> $message=new xmlrpcmsg('examples.conn');
> $client=new xmlrpc_client("/test/server.php", "xmlrpc.datto.lan", 80);
> $response=$client->send($message);

innanzitutto ti conviene PRIMA testare $response per evedre che non sia null, POI il faultcode e INFINE recuperare il valore

> $value=$response->value();
> if (!$response->faultCode()) {
> 	print "Queste sono le sezioni trovate".
> 	$value->scalarval() . "<BR>";
> 	print "<HR>vedi:<BR><PRE>" .
> 	htmlentities($response->serialize()). "</PRE><HR>\n";
> } else {
> 	print "Fault: ";
> 	print "Code: " . $response->faultCode() .
> 		" Reason '" .$response->faultString()."'<BR>";
> }
> 
> 
> server.php
> 
> include("xmlrpc.inc");
> include("xmlrpcs.inc");
> 
> function conn() {
> 	mysql_connect('localhost','root');
> 	mysql_select_db('publish');
> 	$sql="select * from sezioni";
> 	$res=mysql_query($sql);
> 	$count=mysql_num_rows($res);
> 	for ($i=0;$i<$count;$i++){
> 		$row=mysql_fetch_array($res);
> 		$sezioni[]=new xmlrpcval($row['nome_sezione'],"array");

Qui crei un nuovo valore xmlrpc di tipo array e lo aggiungi a un array php.
Il problema e' che $row['nome_sezione'] non e' un array (la riga del db), ma solo il singolo campo 'nome_sezione' di tale array.
I casi sono 2:

Se volevi recuperare solo il nome sezione per spedirlo, avresti dovuto fare (supponendo che il nome sezione sia una stringa):

  $sezioni[] = new xmlrpcval($row['nome_sezione'], "string");

P.S. Inoltre tanto valeva nella query recuperare solo il nome sezione: con 'select nome_sezione from sezioni' hai meno dati traferiti tra DB e PHP e maggiore velocita' di esecuzione nella query nel DB.

Se invece volevi spedire tutta la riga relativa alla sezione, avresti dovuto scrivere
  $valori = array();
  foreach($row as $key=> $val)
    $valori[] = new xmlrpcval($val, "string"); // supponendo che tutti i campi vadano bene come stringa
  $sezioni[] = new xmlrpcval($valori, "array");

oppure 

  $valori = array();
  foreach($row as $key=> $val)
    $valori[$key] = new xmlrpcval($val, "string"); // supponendo che tutti i campi vadano bene come stringa
  $sezioni[] = new xmlrpcval($valori, "struct");

per utilizzare una xmlrpc struct invece di un array e tenerti i nomi dei campi.

NB: utilizzando foreach($row) recuperi tutti i valori di $row. Di default mysql_fetch_array crea un array con il doppio degli elementi desiderati, una volta con indice posizionale e una volta con indice nominale. Per avere i valori listati una volta sola per nome, dovresti fare mysql_fetch_array($res, MYSQL_ASSOC).

> 	}
> 	return new xmlrpcresp(new 
> xmlrpcval("$row[nome_sezione]", "array"));
> 
> }

ma qui ritorni un xmlrpcresp a cui hai aggiunto solo una variabile (di tipo stringa?) codificata come array xmlrpc!!!

forse quello che volevi fare era:
 	return new xmlrpcresp(new xmlrpcval($sezioni, "array"));

> 
> 
> $server=new xmlrpc_server( array("examples.conn" =>
> 				array("function" => "conn")));
> 
> 

Ciao, spero di essere stato d'aiuto
Gaetano




More information about the phpxmlrpc mailing list