5

有什么方式可以让 SMS 与我的主机站点上的 mySQL 数据库交互吗?

如果我让 SMS 代码驻留在那里怎么办?

是否有任何类型的 Web 代码(PHP、Perl、JavaScript 等,我可以用来从 SMS 代码中调用以执行 SQL 事务(选择、插入、更新、删除等)?即,我可以创建一个从 SMS 中调用主机端的库?

我有一个具有 mySQL 后端的网站,我想为我的手机编写一个小应用程序,它几乎是我网站的移动版本(功能和图形较少)

谢谢

谢恩

4

2 回答 2

7

您不能直接从网络浏览器访问 mysql(仅当它具有某种带有 rest/json 的 http 接口但没有数据库服务器具有此功能时?)。但是当然你可以调用任何http服务器,不管它是用php还是其他东西,rest,soap,json等等:你只需要知道哪个url,也许是asm块中的一些“低级”javascript。

目前,最简单的方法是使用 RemObjects 在 Delphi 中创建服务器。在 SmartMobileStudio (SMS) IDE 中,您可以导入类似 SOAP 的接口文件,并且将为您生成所有客户端代码 (pascal)(具有类型安全性)!:)

通过更多的努力,您可以制作一个 SOAP 服务器,但是您可能需要自己制作一些 javascript 代码(并且您需要一个支持 SOAP 的 JS 库)。

在下一个主要版本中将支持 node.js,它是一个服务器端 javascript 服务器!然后很容易在 node.js(或文件等,它没有 webbrowser 沙箱)中访问 mysql,并且使用 socket.io,您可以轻松访问这个 node.js 服务器(如果您愿意,可以在云中)并使用 json 发送数据. socket.io 的好处是您还可以将数据推送到客户端,因为它支持 websockets(通过 http 进行实时双向 tcpip 通信)。

于 2013-08-24T17:59:03.963 回答
7

您还可以使用 XML 访问您的 MySQL 数据:

基本上,您的服务器上有一个 php 文件(名为 getuser.php),您可以在其中建立与数据库的连接,提交查询并以您需要的任何格式回显结果(在本例中为 html 格式的表)。

==================================================== ================

/* Database config */

$db_host        = '....';
$db_user        = '....';
$db_pass        = '....';
$db_database    = 'symphony_kvc'; 

/* End config */

$q = intval($_GET['q']);

$con = mysqli_connect($db_host,$db_user,$db_pass,$db_database);
if (!$con)
  {
  die('Could not connect: ' . mysqli_error($con));
  }

mysqli_select_db($con,"$db_database");
$sql="SELECT * FROM comments WHERE id = '".$q."'";

$result = mysqli_query($con,$sql);

echo "<table border='1'>
<tr>
<th>name</th>
<th>url</th>
<th>email</th>
</tr>";

while($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['url'] . "</td>";
  echo "<td>" . $row['email'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysqli_close($con);

?>

==================================================== ================

短信代码如下所示

unit Form1;

interface

uses
  w3system, w3graphics, w3components, w3forms, w3fonts, w3borders,
  w3application, W3Elements, W3Button, w3memo, w3editbox, w3time, W3Label, W3Image;

type
  TForm1=class(TW3form)
  private
    { Private methods }
    {$I 'Form1:intf'}
  protected
    { Protected methods }
    procedure InitializeObject; override;
    procedure ShowClicked(Sender: TObject);
    procedure FinalizeObject; override;
    procedure StyleTagObject; reintroduce; virtual;
    procedure Resize; override;
    procedure GetMyData;
    Procedure HandleUpdate(Sender:TObject);
    MyData: String;
    Memo1: TW3Memo;
    Button1 :TW3Button;
    Edit1: TW3EditBox;
    FTimer: TW3Timer;
  end;

implementation

{ TForm1}

procedure TForm1.GetMyData;
begin
asm

 xmlhttp=new XMLHttpRequest();
 xmlhttp.onreadystatechange=function()
  {
  @MyData = '';
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    @MyData = xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","getuser.php?q=1",true);
  xmlhttp.send();
 end;  //asm

end;

procedure TForm1.HandleUpdate(Sender:TObject);
begin
  If MyData <> '' then begin               // populate controls soon as data received
    txtHint.InnerHTML := MyData;
    Memo1.Text := MyData;
    Button1.InnerHTML := MyData;
    Edit1.Text := StrAfter(MyData,'mailto:');
    FTimer.Enabled:=False;
    W3Image1.Visible := false;
  end;
end;

procedure TForm1.ShowClicked(Sender: TObject);
begin
  W3Image1.Visible := true;               //make spinner visible
  GetMyData;
  FTimer.OnTime:=HandleUpdate;            //wait until data fetched
  FTimer.Delay:=5;
end;

procedure TForm1.InitializeObject;
begin
      inherited;
      {$I 'Form1:impl'}
      W3Image1.LoadFromURL('res/spinner.gif');   //load spinner and set to invisible
      W3Image1.OnLoad :=
      procedure (Sender: TObject)
      begin
    W3Image1.Visible := false;
  end;

//create the 3 controls
  Edit1 := TW3EditBox.Create(Self);
  Edit1.SetBounds(30, 90, 400, 50);
  W3Label1.SetBounds(30, 50, 400, 50);  // title edit1

  Memo1 := TW3Memo.Create(Self);
  Memo1.SetBounds(30, 180, 400, 150);
  W3Label2.SetBounds(30, 142, 400, 50);  // title memo1

  Button1 := TW3Button.Create(Self);
  Button1.SetBounds(30, 520, 400, 150);

  W3Label3.SetBounds(30, 330, 500, 50);  // title divhtmlelement
  txtHint.SetBounds(30, 370, 400, 150);

  W3Button1.OnClick := ShowClicked;
  FTimer:=TW3Timer.Create;
end;

上面将在表单上显示一个按钮,表单上的另一个元素是 TW3DIVHtmlElement、Memo 和 EditBox。单击时,将获取数据

Kudos w3schools,改编自他们的一篇文章的演示

这工作正常。请参阅 www.lynkit.com.au/MySQL 上的演示

于 2013-09-06T10:14:20.873 回答