c#调用php然后查询数据库的最佳实践

时间:2011-04-01 11:51:39

标签: c# http

出于某种原因,我必须有一个Windows客户端应用程序(用C#编写),它与我服务器上的PHP文件通信。由于可能会对exe文件进行反汇编,因此不允许Windows应用程序在代码中进行SQL查询。这是使用此方法的主要原因。

基本上它看起来像这样:从Windows客户端我调用getResult.php然后打开与数据库的连接,查询数据库,将结果返回给客户端并关闭数据库连接。因此,Windows客户端没有任何查询数据库的代码,它只是调用PHP文件。

我的几个问题如下:
1.将请求从c#代码发送到PHP文件的最佳方法是什么? (因为我需要发送这个php文件一些参数,如ID等... - >我知道我可以使用GET这样的getResult.php吗?id = 123456,但这与POST同样可能吗?还有,一个问题:如何在代码中执行此操作?http请求或?)

2.自从每次调用PHP文件(我将调用更多文件,如getResult.php,getStatus.php等等)时,我会以某种方式将登录信息发送到该PHP文件PHP将用于查询数据库。我的问题是如何安全地执行此操作,并且加上:是否可能以某种方式调用doLogin.php之类的东西并发送登录用户名和密码一次,之后调用此(以及所有其他)php文件而不需要将登录信息作为参数发送给该函数。我知道当整个应用程序在服务器上时我可以使用PHP会话,但主要区别在于我只调用一些文件,执行它们并关闭连接。

我的主要问题是:从概念的角度来看这是否正常,或者是否有任何众所周知的概念,我不知道 - 请告知我愿意学习。我做了一些研究,并且相信这可能必须通过Web服务方法完成,但请回复您对此的想法。

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

您的PHP代码有效地用作RESTful数据访问API。通过SSL(HTTPS)在Web服务器上运行PHP,以便加密所有通信。

您可以使用受信任的证书来验证客户端,或者如果您需要不同的访问级别,提交用户名/密码以获取数据访问请求的授权令牌并不是一个坏主意。

这是雅虎的一个例子!:http://developer.yahoo.com/dotnet/howto-rest_cs.html

答案 1 :(得分:1)

对于简单的GET,您可以这样做:

var webClient = new WebClient();
webClient.DownloadString("http://someurl.com/somescript.php");

然后您可以从PHP脚本返回XML或JSON格式的响应? 您也可以使用WebClient进行POST。

至于登录,你也可以这样做。我在我的一个应用程序中做了类似的事情。 我们将登录详细信息发送到脚本(ASP.NET而不是PHP),ASP页面返回一个XML响应,告诉C#app它是否成功 - 然后应用程序可以决定是否允许它继续。

答案 2 :(得分:0)

您正在寻找的是REST。在这种情况下,您的PHP文件充当Web服务,您可以使用RESTful准则来确定您的方案的最佳实践。

答案 3 :(得分:0)

您必须在C#app和PHP之间加密数据。为什么?为了安全。您可以轻松地将加密数据存储在MySQL中。

  

插入表格(myname,mysurename)   值   (AES_ENCRYPT( 'Voon',通),AES_ENCRYPT( 'Voon',通过))

C#work。

HttpWebRequest myRequest =
 (HttpWebRequest)WebRequest.Create(URL);
             myRequest.Method = "GET";
             WebResponse myResponse = myRequest.GetResponse();
             StreamReader sr = new StreamReader(myResponse.GetResponseStream(),
 System.Text.Encoding.UTF8);
             string result = sr.ReadToEnd();
             //Console.WriteLine(result);
             result = result.Replace('\n', ' ');
             sr.Close();
             myResponse.Close();

Php代码:

 <?php
    function connection() { 

        $mysql_server = ""; 

        $mysql_admin = ""; 

        $mysql_pass = "t"; 

        $mysql_db = ""; 

        @mysql_connect($mysql_server, $mysql_admin, $mysql_pass) 
        or die('Brak połączenia z serwerem MySQL.'); 
        // łączymy się z bazą danych 
        @mysql_select_db($mysql_db) 
        or die('Błąd wyboru bazy danych.'); 

    } 

     connection();



     $data = mysql_query("SELECT QUERY") 

     or die(mysql_error()); 
        mysql_query("TRUNCATE TABLE `table`")  or die(mysql_error()); 
     while($info = mysql_fetch_array( $data )) 
     { 

     $stringData = $info['columnname'] . ",";
    $temp = $stringData;

     $stringData =$info['columnname'];
    $temp = "$temp" . "$stringData";

    echo "$temp" . ".";

     } 
     }


     ?> 

此代码。在C#中调用php和getresult(column.column,next column.column)。发送数据后,它重新创建表。

希望它适合你。

EDIT! 要使用参数调用链接,请使用:

PHP中的

$myname = $_REQUEST['myname'];

例如。 http://mylink/setname.php?myname=VoonArt PHP存储在变量VoonArt

2)使用https发送重要数据。也加密它。在C#和PHP(triple-des)中使用相同的加密

C#-->Encode Pass-->Hey PHP can you get me some data my password is &283&(^@(08218--> Okay, C# I'll decode your password and send you result!-->PHP decode password --> PHP getdata -->php encode data with (eg. triple-des) --> Hey C# catch, you own me a beer huh?