Ti passo pari pari quello che uso io nei miei programmi, è una procedura in PHP che funziona con MySQL, e che prevede la gestione del SELECT, UPDATE, DELETE, INSERT e altri.
Ovviamente se hai necessità la puoi adattare alle tue esigenze, per domande sono qui.
E' anche prevista la gestione di una password che devi impostare sia su questo file PHP (alla riga n. 13) sia sul tuo programma in B4A (o B4J non ha importanza) in modo da gestire una comunicazione sicura tra client e server.
File EXECUTE.PHP:
<?php
// esegue un comando SQL (SELECT - UPDATE - DELETE - INSERT o altri)
$sql = '';
if (isset($_GET['sql'])) $sql = $_GET['sql'];
$chk = '';
if (isset($_GET['chk'])) $chk = $_GET['chk'];
include('config.php');
$md5 = md5("password".$sql);
if ($md5 != strtolower($chk)) {
echo "E\nErrore parametro chk\nParametro chk non corretto\n"; // 4 righe
return;
}
//avvio connessione al database
$db = @mysql_connect($mysql_host,$mysql_user,$mysql_password);
if (!$db) {
echo "E\nErrore connessione al database\n".mysql_error()."\n"; // 4 righe
return;
}
mysql_select_db($mysql_database);
mysql_query("SET CHARACTER SET utf8");
$rs = mysql_query($sql);
if ($rs === false) {
echo "E\nErrore query\n".mysql_error()."\n".$sql;
mysql_close($db);
return;
}
// estraggo il comando base
$cmd = strtoupper($sql);
$vn = strpos($cmd, " ");
if ($vn !== false) $cmd = substr($cmd, 0, $vn);
switch ($cmd) {
case "SELECT":
$nrs = mysql_num_rows($rs); // record count
for ($i = 0; $i < $nrs; $i++) { $lst[] = mysql_fetch_assoc($rs); } // porto i risultati sull'array $lst
echo json_encode($lst);
break;
case "UPDATE":
echo "K\n".mysql_affected_rows();
break;
case "DELETE":
echo "K\n";
break;
case "INSERT":
echo "K\n".mysql_insert_id();
break;
default:
echo "K\n";
}
@mysql_free_result($rs);
mysql_close($db);
?>
Per chiamare la routine puoi fare (ad esempio) così:
Dim query As String
query = "Select ......... " ' qui ci scrivi la tua query
Dim MD5 As String = MD5calc("password" & query) ' la password deve essere la stessa del file PHP
Dim su As StringUtils
query = su.EncodeUrl(query,"UTF8")
HttpJob.Download("http://www.ilnomedelserver.it/execute.php?chk=" & MD5 & "&sql=" & query)
Nel caso di una SELECT il sistema risponderà con il recordset in formato JSON, e vedi che è andato tutto bene perchè il primo carattere della stringa ricevuta è un "{", mentre se il primo carattere ricevuto è una "E" (che vuol dire errore), riceverai una stringa (divisa sempre in 4 righe) con la descrizione dell'errore.
Nel caso di un UPDATE, se tutto è ok, riceverai una stringa di 2 righe, la prima sarà "K" e la seconda riga ti dice quanti record ha modificato, se invece c'è stato un errore riceverai la solita stringa composta da 4 righe con la descrizione dell'errore.
Nel caso di un INSERT, se tutto è ok, riceverai una stringa di 2 righe, la prima sarà "K" e la seconda riga ti dà un eventuale ID del record inserito (se è previsto la generazione dell'ID), se invece c'è stato un errore riceverai la solita stringa composta da 4 righe con la descrizione dell'errore.
Spero che questa cosa ti sia utile
Per qualsiasi domanda chiedi pure
Sergio
Edit: per iniziare a fare un po' di prove puoi temporaneamente disabilitare il test del checksum MD5, basta che nel file PHP cancelli le seguenti righe:
if ($md5 != strtolower($chk)) {
echo "E\nErrore parametro chk\nParametro chk non corretto\n"; // 4 righe
return;
}
e nel tuo codice fai a meno di calcolare l'MD5 e non lo invii come parametro