2011-12-19 88 views
1

我正在创建一个连接到MySQL数据库的PHP网站。接下来,我需要编写一个将使用相同数据库的C#桌面应用程序。不幸的是,我无法直接从远程位置连接到数据库,我的托管公司也不会允许SSH。PHP-C#双向通信

那么我有什么选择?如果托管公司支持.NET,这不会是一个问题,但我对PHP没有经验。我必须编写一个PHP服务(SOAP?),然后在桌面应用程序中使用它吗?另外,我如何从桌面应用程序与服务器通信?

任何帮助表示赞赏!

回答

3

根据安全要求,可以编写一个通用的SQL在PHP执行页时,采取了SQL作为字符串参数,并返回结果作为字符串数组(可能需要一些元数据太多或东西)?

以外,我能想到的唯一的事情就是某种形式的Web服务。除非你需要通知你的c#应用程序关于服务器的某些东西(在这种情况下,你可以使用这种方法),并且可以从C#应用程序读取和写入,无需在两端写入WebService总是试图从C#应用程序频繁轮询)

+1

将SQL作为字符串参数使用是一个坏主意,因为它会为注入创建一个简单的目标,即使它位于本地服务器之间,它也只是一个坏习惯。而是提供返回所需对象/字符串或数据的SOAP服务,并避免将SQL发送到Web服务器。 – Kolky 2011-12-19 10:58:15

+1

我喜欢这个答案最好,但是,正如Kolky指出的,我担心注射。但后来我不确定Kolky在第二句话中意味着什么 - 如何通过查询字符串告诉服务器如何插入数据库? – jkottnauer 2011-12-19 14:12:16

+0

@Kolky这就是为什么我在那里提出关于安全性的警告 - 根据我所知,可能绝对没有SQL注入的风险。除了因为它使得SQL注入更容易,并不意味着他不能从任何参数中解析出注入方法,或者将参数作为单独的参数传递并将它们作为参数化查询应用于PHP本身。 SOAP是一个痛苦的坦率的屁股,本身并不比采用字符串的网页更安全。 – 2011-12-19 14:14:48

0

你可以做的是提供您可以从您的C#代码访问一些PHP-包装。作为一个例子,您可以使用关于C#/ PHP通信的this讨论。

基本上你可以发送一个HTTP请求到PHP和检索它与C#返回值。 PHP会执行数据库请求。如果您在网站上使用AJAX,使用相同的通信界面应该很容易。

-1

这是马特研究员答案的第一段。 但是,您以何种形式将数据发回给应用程序? 也许JSON?

PHP webpage 

<?php 

$host = "host.host.com"; 
$user = "XXXXX"; 
$password = "XXXX";//plaintext :) 

$connection = mysql_connect($host, $user, $password); 

$database = "XXXXX"; 


$syntax = $_GET['syntax']; //www.example.com/help.php?syntax=DROP%20TABLE%20XXX 

$result = mysql_query($syntax); 

//somehow output the $result in C# readable form 

?> 
+0

csv,xml,json - 随你选。他们三人在c#.net中都有库来解析它们。 – 2011-12-19 14:20:34

3

最佳选择是在您的PHP站点中创建一组RESTful服务。

一个采取考虑最重要的事情是REST是约定更多的配置,而且也没有必要的东西,如SOAP这可能是您的解决方案绝对的矫枉过正。

您刚刚从PHP和.NET Windows应用程序发送JSON将解析它作为一个CLR对象。

样本的情况是:

  • 服务操作http://yourdomainhere.com/API/Message/34894 ** 这将返回类似{ "text": "hello world" }
  • 。NET客户端收到此JSON并使用JSON解析器,如牛顿JSON解析器,你会这样做:

    MessageDto dto = JsonConvert.DeserializeObject([从服务调用接收的JSON]); MessageBox.Show(dto.Text); //这将显示“你好世界”

这只是一个非常简单的例子,但它会让你知道接下来会发生什么。

您可以使用WebRequest/WebResponse .NET BCL类查询您的REST API。

PHP只需要在输出流中发送包含JSON的Web响应,就这些了。没有SOAP,没有XML,没有复杂性。把事情简单化。