c#应用程序如何高效地从php检索数据

c#应用程序如何高效地从php检索数据,c#,php,data-retrieval,posting,C#,Php,Data Retrieval,Posting,下面是我的php代码,运行良好: <?php //This script checks the id and code of the already registered user from the database. If correct it returns the other details otherwise the respective error //starting session session_start(); //catching data from client

下面是我的php代码,运行良好:

<?php

//This script checks the id and code of the already registered user from the database. If correct it returns the other details otherwise the respective error

//starting session
session_start();

//catching data from client
$id=$_POST['id'];
$code=$_POST['code'];

if($id&&$code)//checking if the data is not empty
{
    //Connecting to server
    ($connect=mysqli_connect('localhost','root','','ohhell')) or exit("Connection Failed");

    //Selecting user for given id
    $result=mysqli_query($connect,"SELECT * FROM users WHERE id='$id'");

    //Counting number of rows
    $numrows=mysqli_num_rows($result);

    if($numrows!=0)
    {
        //Creating associative array
        $row=mysqli_fetch_assoc($result);

        //freeing result set
        mysqli_free_result($result);

        //fetching code from database
        $db_code=$row['code'];
        $code=md5($code);

        //checking if the codes match
        if($code==$db_code)
        {
            //change status
            mysqli_query($connect,"UPDATE users SET status='yellow' WHERE id='$id'");

            $_SESSION['id']=$row['id'];
            $_SESSION['name']=$row['name'];
            $_SESSION['location']=$row['location'];

            $name=$row['name'];
            $location=$row['location'];

            //closing connection
            mysqli_close($connect);

            //returning values to client
            exit("$name\n$location");//Successful Login. Client can now create an object and switch the screen
        }
        else
        {
            exit("Invalid Player Code");//Unsuccessful Login
        }
    }
    else
        exit("Invalid Player ID");//Unsuccessful Login
}
else
    exit("Incomplete Details");//Unsuccessful Login     
成功接收数据后,c#客户端通过“\n”将两个数据分离,然后生成一个类的对象,并将接收到的数据填充到该类的相应数据成员中

现在问题来了,因为我现在正在测试,一切正常。但是,我的问题是,由于正在读取的数据将以字符串的形式出现,我如何确保在客户端成功地接收到数据,并且检索到的字符串实际上包含数据而不是错误消息

我的意思是,如果连接到php时发生内部错误,或者任何其他网络错误返回相应的错误,也将以字符串的形式返回,那么现在我将如何区分客户端应用程序是应该开始将数据与字符串分离以生成对象,还是应该以错误终止。 对于包含在php中的错误,我可以在c#client中使用相应的if()条件,但这不是一种正确的方法,因为错误不能保证仅限于php脚本中考虑的错误。可能会返回大量错误,因此在这种情况下应该采取什么方法来实际区分错误和真实数据

一种可能的方法是在发送数据之前预先向数据发送一个信号,比如说“1”,并在客户端测试接收到的字符串是否以“1”开头。如果是,则进行分离,否则显示相应的错误消息。但这种方法也不是最优的,因为如果错误本身从1开始,它将失败

那么,为了通过php脚本以最佳方式向c#发送数据,实际上应该做些什么呢

抱歉,描述太长了!等待援助

多亏了一百万兆…:)

你可以用它来判断天气是否出错。 如果在运行所述php脚本(即使用)期间发生错误,则php可以设置相应的HTTP头。 如果Startus代码正常,您可以解析响应(如注释中所述,使用)并检索结果。如果网络通信中发生错误,则您自己在客户端中产生相应的错误。如果PHP中发生错误,您可以通过解析响应来检索错误,从而检索错误消息

PHP中的简单示例

$response = array();
$responseCode = null;
try {
  // some code is executed
  $responseCode = 200;
}
catch (Exception $e) {
  // an error occured and we have to add it to our response
  $response['error'] = array('errorcode' => $e->getCode(), 'error' => $e->getMessage());
  $responseCode = 500;
}

http_response_code($responseCode);
echo(json_encode($response ));
现在在c#中,只需检查标题即可。如果是500(意味着发生了错误),json_解码结果并获得错误。如果是200(表示OK),json_将对结果进行编码。如果是其他错误,请根据linkes HTTP错误代码列表对其进行响应。

您可以使用来确定是否发生了错误。 如果在运行所述php脚本(即使用)期间发生错误,则php可以设置相应的HTTP头。 如果Startus代码正常,您可以解析响应(如注释中所述,使用)并检索结果。如果网络通信中发生错误,则您自己在客户端中产生相应的错误。如果PHP中发生错误,您可以通过解析响应来检索错误,从而检索错误消息

PHP中的简单示例

$response = array();
$responseCode = null;
try {
  // some code is executed
  $responseCode = 200;
}
catch (Exception $e) {
  // an error occured and we have to add it to our response
  $response['error'] = array('errorcode' => $e->getCode(), 'error' => $e->getMessage());
  $responseCode = 500;
}

http_response_code($responseCode);
echo(json_encode($response ));
现在在c#中,只需检查标题即可。如果是500(意味着发生了错误),json_解码结果并获得错误。如果是200(表示OK),json_将对结果进行编码。如果是其他内容,请根据linkes HTTP错误代码列表对其进行响应。

您可以使用它来指示错误情况。 目前您似乎只使用了
200 OK
(默认情况下),但例如
无效的玩家代码
可能会导致
401未经授权
403禁止
(如果这是为了某种授权)

在c#端,您可以通过

获取状态代码,您可以使用该代码指示错误情况。 目前您似乎只使用了
200 OK
(默认情况下),但例如
无效的玩家代码
可能会导致
401未经授权
403禁止
(如果这是为了某种授权)


在c端,您可以通过

获得状态代码。我参考了Vikas Prasad的评论问题:@ReeCube我可以通过尝试JSON或XML来满足程序的所有要求吗?如果可以,您可以告诉我具体的教程。我不知道这两个教程。在这两个教程中,我更喜欢哪一个

JSON或XML正是您传输数据的方式,以及读取数据的方式,您需要php和c#才能使用JSON或XML。我更喜欢JSON,但我不确定它在C#上的效果如何,我从未测试过

但首先应该为PHP服务器添加JSON。在PHP上,JSON非常容易使用,有一个and函数。在您的例子中,您只需要函数,因为在服务器端,您只需要为客户端生成JSON。Google和PHP文档非常支持如何使用,但是如果您有问题,请发表评论

下面是一个小例子:

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>


我提到了Vikas Prasad的评论问题:“@ReeCube我可以满足尝试JSON或XML的程序的所有要求吗?如果可以,你能告诉我具体的教程吗?我不知道这两个教程。我更喜欢哪一个?”

JSON或XML正是您传输数据的方式,以及读取数据的方式,您需要php和c#才能使用JSON或XML
。我更喜欢JSON,但我不确定它在C#上的效果如何,我从未测试过

但首先应该为PHP服务器添加JSON。在PHP上,JSON非常容易使用,有一个and函数。在你身上