从 PHP Web 服务未正确返回编码响应

Posted

技术标签:

【中文标题】从 PHP Web 服务未正确返回编码响应【英文标题】:From PHP Webservice not returning encode response correclty 【发布时间】:2015-11-17 06:36:31 【问题描述】:

我编写了简单的 php 代码来从我的 iphone 应用程序中注册用户详细信息。它工作正常并返回 JSON 输出。我在下面添加了该代码

header('Content-type: application/json');
include 'connection.php';
$response = array();

$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

if($username == NULL || $password == NULL || $email == NULL )

    $response["success"] = 0;
    $response["message"] = "Something Empty";

else

    $sql = "INSERT INTO User (username, password, email)
VALUES ('".$username."', '".$password."', '".$email."')";

if ($conn->query($sql) === TRUE) 

    $response["success"] = 1;
    $response["message"] = "Done";

 else 

    $response["success"] = 0;
    $response["message"] = "Error";



echo json_encode($response);
$conn->close();

但是当我尝试在添加到表之前检查用户名已经存在时。我从我的 Xcode 日志中收到错误消息。

JSON text did not start with array or object and option to allow fragments not set.

if($username == NULL || $password == NULL || $email == NULL )

    $response["success"] = 0;
    $response["message"] = "Something Empty";

else

   $query = mysql_query("SELECT * FROM User WHERE username='".$username."'");


    if (mysql_num_rows($query) != 0)
  
      $response["success"] = 0;
      $response["message"] = "Username Already Exists";

  else

      $response["success"] = 1;
      $response["message"] = "That Name Fine";
  



【问题讨论】:

【参考方案1】:

很可能是 php 错误(可能只是通知或警告,具体取决于您的 error_reporting 设置)污染了 json 输出。

您需要调试问题,并且可以考虑将error_reporting 级别用于生产。

【讨论】:

$query = mysql_query("SELECT * FROM User WHERE username='".$username."'"); 会在调用if (mysql_num_rows($query) != 0)之前输出一些东西 你是用mysql还是mysqli连接? 那是你的错误。你用过mysql_query() 太棒了。是的,它解决了这个问题。我根据mysqli改了代码 mysql 已贬值,因此您绝对应该使用 mysqli。 mysqli 还支持更多的选项和功能

以上是关于从 PHP Web 服务未正确返回编码响应的主要内容,如果未能解决你的问题,请参考以下文章

从 GRPC c++ 服务器实现返回“未找到”响应的正确方法是啥?

如何使用 PHP 从 Web 服务获取 XML 数据?

Web 服务显示 Jquery 令牌输入结果的正确响应应该是啥?

CORS 尝试,php 未修改响应标头

#2002 - 服务器没有响应 (或者本地 MySQL 服务器的套接字没有正确配置) 是怎么回事。

从服务返回数据未返回正确数据