2011-12-19 89 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,沒有複雜性。把事情簡單化。