【问题标题】:How to use the json_decode/json_encode in PHP?如何在 PHP 中使用 json_decode/json_encode?
【发布时间】:2011-06-22 13:17:06
【问题描述】:

我在 PHP 中遇到问题。我正在尝试从 Android 传递用户名/密码并通过 PHP 检查 MySQL 中的值。使用json_decodejson_encode 时,json_decode 有效,但json_encode 无效。但是当我删除 json_decode 时,json_encode 可以工作,但我希望它们都可以在我的程序中工作。

这是我的代码:

$a = $_POST['userpwd_value']; //Accesing the value from Android.

$b = json_decode($a); //Decoding android value using JSON.

$username = $b->{'username'}; //Assigning username from android to a variable.
$password = $b->{'password'}; //Assigning password from android to a variable.

echo $username.$password;

$check = mysql_query("select username,password from user where id=1");
$row = mysql_fetch_assoc($check);

//if($row['username']==$username && $row['password']==$password)
    $output[]=$row;
//else
    //$output[]=array("value"=>"false");
print(json_encode($output));

问题出在哪里?

【问题讨论】:

  • 你试过用 print_r(json_encode($output)) 看看输出是什么
  • 您是否确定 $row 包含您希望它包含的内容?也许这就是 json_encode 没有返回预期值的原因。
  • 从代码中删除echo $username.$password 怎么样?
  • @Adnan 它在 PHP 中产生结果,但在 android 中没有
  • @Crashspeeder 是的,我已经检查了 $row 值 @Gumbo json_decode 会产生输出,但 json_encode 不会 @Michael J.V 结果不会改变

标签: php android mysql json


【解决方案1】:

json_encode 如果变量内容未正确 UTF-8 排序,则会失败。如果您的数据库使用另一个字符集,变量包含特殊字符,那么您应该在那里得到一个错误。 (提高error_reporting 级别或查看json_last_error 以找出答案)

您的特定代码的另一个问题是您首先输出了其他内容:

 echo $username.$password;

这将使整个 JSON 输出无效。如果您有前导垃圾,您的浏览器将无法正确解码返回的变量。也不要忘记使用header("Content-Type: application/json"); 发送带有结果的适当标题


  $b=json_decode($_POST['userpwd_value']); 
  $username=$b->{'username'}; 
  $password=$b->{'password'};

  $check = mysql_query("select username,password from user where id=1");
  $row = mysql_fetch_assoc($check);
  $row = array_map("utf8_encode", $row);

  if ($row['username']==$username && $row['password']==$password) {
      $output[] = $row;
  } else {
      $output[] = array("value"=>"false");
  }
  header("Content-Type: application/json");
  print(json_encode($output));

【讨论】:

  • @mario:谢谢你的建议,但我能理解你的第二个建议,你能详细说明一下吗
  • 在脚本顶部添加error_reporting(E_ALL);,在json_encode 输出后添加var_dump(json_last_error());
  • 不,还是不行。$a=$_POST['userpwd_value']; //从android获取值 $b=json_decode($a); //使用JSON解码android值 $username=$b->{'username'}; //将android中的用户名分配给变量 $password=$b->{'password'};//将android中的密码分配给变量 echo $username.$password;当我删除它时,代码 json_encode 将起作用。
  • 是的,这很有趣。你试过我提出的建议了吗?
  • 为什么回声还在你的代码中?那么var_dump 说了什么?
【解决方案2】:

我认为 JSON 编码的数据中可能存在另一个级别 ($a)。您的 echo 语句是否显示正确的用户名和密码?如果没有,请将var_dump($b); 放在您的后面 $b = json_decode($a); 声明。

【讨论】:

  • 是的,它显示了来自 android 的正确用户名和密码
【解决方案3】:

将下面两行替换为以下内容。

你原来的台词:

  $username=$b->{'username'};
  $password=$b->{'password'};

换行:

  $username=$b->username;
  $password=$b->password;

更换后检查是否正常。

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多