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

c#调用php然后查询数据库的最佳实践,c#,http,C#,Http,出于某种原因,我必须有一个windows客户端应用程序(用C#编写),它与服务器上的PHP文件进行通信。由于可能会反汇编exe文件,因此不允许Windows应用程序在代码中包含SQL查询。这是使用这种方法的主要原因 基本上是这样的:我从windows客户端调用getResult.php,然后它打开到数据库的连接,查询数据库,将结果返回到客户端并关闭数据库连接。因此,windows客户端没有任何查询数据库的代码,它只调用PHP文件 我的几个问题如下: 1.将请求从c#代码发送到PHP文件的最佳方式

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

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

我的几个问题如下:
1.将请求从c#代码发送到PHP文件的最佳方式是什么?(因为我需要向这个php文件发送一些参数,比如ID等…->我知道我可以使用getResult.php?ID=123456这样的GET来实现,但是POST是否也可以实现这一点?还有一个问题:如何在代码中实现?http请求还是?)

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

我的主要问题是:从概念的角度来看,这可以吗?或者有什么我不知道的常见概念吗?请建议我愿意学习。我做了一些研究,并相信这可能必须通过web服务方法来完成,但请一定要回答您对此的想法


谢谢你的帮助

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

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


以下是雅虎的一个例子:

对于简单的获取,您可以执行以下操作:

var webClient = new WebClient();
webClient.DownloadString("http://someurl.com/somescript.php");
然后可以从PHP脚本返回XML或JSON格式的响应? 您也可以将WebClient用于POST

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

您要查找的是。在这种情况下,您的PHP文件充当web服务,您可以使用RESTful指南来确定您的场景的最佳实践。

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

插入到表中(myname、MyUreName) 价值观 (AES_加密('Voon',pass),AES_加密('Voon',pass))

工作

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" . ".";

     } 
     }


     ?> 
例如,
http://mylink/setname.php?myname=VoonArt
存储在变量VoonArt中的PHP

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


您的问题与PHP或数据库无关。您不是在调用PHP“文件”。您正在调用HTTP服务。是的,如果ASP返回登录成功,您可以在windows应用程序代码中执行某些操作,但是,如果您需要调用其他ASP脚本,您是否需要再次发送登录信息?我想做的是登录一次,然后能够调用所有其他PHP(在您的情况下是asp)文件,而不必再次发送身份验证,这样基本上这些文件将不知何故知道我是谁。如果这是一个简单的web应用程序,我会使用会话来实现,但我认为这不会以这种方式实现。我不需要在我的应用程序中实现这一点,但出于您的目的,您可以生成AuthenticationToken和AuthenticationExpires日期/时间,并将它们存储在数据库的用户表中。然后将AuthenticationToken传递回成功XML中。然后,应用程序可以在每次调用脚本时发送此AuthenticationToken。如果发送请求的时间超过AuthenticationExpires日期/时间,您可以再次向他们显示登录屏幕。
U
是一个字母<代码>你是一个词。
 <?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" . ".";

     } 
     }


     ?> 
$myname = $_REQUEST['myname'];
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?