Premessa: il programma l'ho realizzato per utenti con conoscenze medio-basse, non è ottimizzato, utilizza il protocollo HTTP con chiamata GET (sarebbe meglio usare un POST o altri sistemi), per cui ben vengano commenti e suggerimenti, ma volevo tenere la cosa semplice da capire e quindi semplice da studiare per i newbie.
Innanzitutto devi copiare il file execute.php (che ti allego di seguito) nel server dove è installato il database MySQL.
Dentro a quel file, alla riga #13 devi impostare una password che vuoi tu.
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('include/config.php');
$md5 = md5("lamiapassword".$sql);
if ($md5 != strtolower($chk)) {
echo "E\nErrore parametro CHK\nParametro CHK non corretto\n"; // 4 righe
return;
}
//avvio connessione al database
$db = @new mysqli($mysql_host,$mysql_user,$mysql_password,$mysql_database);
if ($db->connect_error) {
echo "E\nErrore connessione al database\n".$db->connect_error."\n"; // 4 righe
return;
}
$db->query("SET CHARACTER SET utf8");
$rs = $db->query($sql);
if ($rs === false) {
echo "E\nErrore query\n".$db->error."\n".$sql;
$db->close();
return;
}
// estraggo il comando base
$cmd = strtoupper($sql);
$vn = strpos($cmd, " ");
if ($vn !== false) $cmd = substr($cmd, 0, $vn);
switch ($cmd) {
case "SELECT":
$nrs = mysqli_num_rows($rs); // record count
$lst = [];
for ($i = 0; $i < $nrs; $i++) { $lst[] = mysqli_fetch_assoc($rs); } // porto i risultati sull'array $lst
echo json_encode($lst);
break;
case "UPDATE":
echo "K\n".$db->affected_rows;
break;
case "DELETE":
echo "K\n";
break;
case "INSERT":
echo "K\n".$db->insert_id;
break;
default:
echo "K\n";
}
//@mysql_free_result($rs);
$db->close();
?>
Devi inoltre copiare il file config.php impostando tutti i parametri che sono necessari per il collegamento al server MySQL, eccolo qui:
<?php
$mysql_host = "98.26.109.66"; // oppure mettere localhost
$mysql_database = "nome del database";
$mysql_user = "nome utente";
$mysql_password = "password del database";
?>
Questo file è consigliato metterlo nella sotto cartella “include”, ma casomai modifica la linea #11 del file execute.php specificando la posizione corretta.
Per fare una chiamata da VB.NET puoi usare ad esempio (ovviamente la password è da configurare):
Public Function DBexecute(Sql As String) As String()
Dim md5 As String = MD5Calc("lamiapassword" & Sql)
Dim query As String = System.Web.HttpUtility.UrlEncode(Sql)
Dim str As String = ""
Dim wc As New WebClient
wc.Encoding = Encoding.UTF8
Try
Dim cmd As String = "http://www.ilmioserver.it/execute.php?chk=" & md5 & "&sql=" & query
str = wc.DownloadString(cmd)
Catch ex As Exception
Return New String() {"E", "ERRORE", "Mancata connessione al server", ""}
End Try
If str.StartsWith("E") Then
Dim err As String() = str.Split(Convert.ToChar(10))
Return New String() {"E", err(1), err(2), err(3)}
End If
If str.StartsWith("K") Then
Return str.Split(Convert.ToChar(10))
End If
Return New String() {str}
End Function
La funzione esegue una chiamata al server dove c'è MySQL e ritorna un array di stringhe dove la prima stringa è il risultato dell'operazione.
Se la prima stringa è “E”, c'è un errore, e le altre stringhe contengono l'errore, se è “K” è andato tutto ok.
Per fare una SELECT puoi ad esempio fare:
Dim ris = DBexecute("SELECT nome,corso from pt_allievi where sigla='AX01' order by nome")
If ris(0) = "E" Then ' c'è un errore e lo visualizzo
MessageBox.Show(ris(2), ris(1), MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
' in risposta ho un JSON
If ris(0).Trim <> "null" And ris(0) <> "[]" Then
' risposta corretta, la analizzo
Dim json = New JsonParser(ris(0))
Dim ar = json.NextArray
json = Nothing
For Each ht As Hashtable In ar
' ........ faccio quello che devo fare, ad esempio importare i dati in una DataTable
' per poi mostrarli su di una DataGridView o cose del genere
Next
End If
oppure ad esempio una UPDATE
Dim ris = DBexecute("UPDATE pt_autoscuole SET maxpren=4,piugiorno=1 where autoscuola='RM0001'")
If ris(0) <> "K" Then
MessageBox.Show(ris(2), ris(1), MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.Dispose()
Exit Sub
End If
Per altre info chiedi pure
Sergio