【问题标题】:JSON works from URL not from MySQLJSON 来自 URL 而不是来自 MySQL
【发布时间】:2012-06-18 13:15:44
【问题描述】:

好的,首先,感谢您阅读我的问题,我会尝试添加尽可能多的信息。我目前正在为 Garrysmod 游戏类型制作排行榜,我从游戏模式的编码人员那里获得了一个 API 密钥,使用该 API 密钥我可以使用 STEAM_ID 提取 JSON 编码数组

示例: http://www.revoltgaming.com/api/?key=SENCORED_API_KEY&action=ajack_all&steamid=STEAM_0:0:5898349

如果我使用下面的代码一切正常:

$usr_url_everything = "http://www.revoltgaming.com/api/?key=114d788c3e40e91842f945f19c978e66&action=ajack_all&steamid=" . $_SESSION['STEAMID'];
$json_encoded = file_get_contents($usr_url_everything);
$json_decoded = json_decode($json_encoded, true);

但我所做的是,当用户第一次加入时,我会提取他的 JSON 字符串并将其保存在 MySQL 数据库中:

$usr_url_everything = "http://www.revoltgaming.com/api/?key=114d788c3e40e91842f945f19c978e66&action=ajack_all&steamid=" . $_SESSION['STEAMID'];
$json_encoded = file_get_contents($usr_url_everything);
$query = "INSERT INTO vm_leaderboard (`txtUser`, `txtJson`) VALUES ('" . $_SESSION['STEAM64'] . "', '" . $json_encoded . "')";

但是从我尝试DECODE从数据库中提取的json字符串的那一刻起,它就不起作用了,它返回NULL。我保存在数据库中的 json 字符串与我直接从 API 页面获取的字符串相同。

以下是从数据库中提取的字符串: http://www.ishots-cave.com/revolt_/lb_applejack.php

【问题讨论】:

  • 是否为数据库正确转义了 JSON 字符串?
  • 只需回显您从数据库中获得的信息,您可能会看到问题的答案。
  • @Zagor23 可以在此处找到回声:ishots-cave.com/revolt_/lb_applejack.php(每行一次),与我从revoltgaming.com/api 中提取的回声相同
  • @Waltzy The string is saved as 'TEXT BLOB' in the database $leaderboard = new Database; $query = "SELECT * FROM vm_leaderboard"; $leaderboard->query($query); while ($leaderboard->nextRecord()) { // Decode his json string $json_encoded = $leaderboard->Record['txtJson']; echo $json_encoded; echo json_decode($json_encoded, true, 2);
  • @AndriesVerbanck - 添加我的评论作为要接受的答案。不客气!

标签: php mysql database json


【解决方案1】:

因此,正如我在评论中发布的那样,将其转换为有用的答案 - JSON 字符串需要在插入数据库之前进行清理:

$usr_url_everything = "http://www.revoltgaming.com/api/?key=&action=ajack_all&steamid=" . $_SESSION['STEAMID'];
$json_encoded = file_get_contents($usr_url_everything);
// sanitize the JSON string
$json_encoded = mysql_real_escape_string($json_encoded);
// insert in common way
$query = "INSERT INTO vm_leaderboard (`txtUser`, `txtJson`) VALUES ('" . $_SESSION['STEAM64'] . "', '" . $json_encoded . "')";

享受吧!

【讨论】:

  • 我已经尝试了你的解决方案,首先 TRUNCATE 表,所以它可以完全更新,但仍然无法正常工作
  • @AndriesVerbanck 但是在评论中你回答说它似乎已经过验证:-) 那么现在问题出在哪里?
  • 是的,json 已经过验证,但脚本仍然无法运行。我现在已经通过使用每 24 小时触发一次的 CHRON 作业直接从 URL 更新数据库来解决这个问题。
  • 你应该接受答案 Andries,这些人花时间帮助你!
  • @Waltzy 抱歉,忘记了。现在完成
【解决方案2】:

JSON 文件中的反斜杠和引号可能会改变您的查询。 于是重试代码如下:

$query = "INSERT INTO vm_leaderboard (`txtUser`, `txtJson`) VALUES ('" . $_SESSION['STEAM64'] . "', '" . mysql_real_escape_string($json_encoded) . "')";

【讨论】:

  • 它似乎仍然失败。无论如何感谢您的帮助。
  • 您能否在执行查询的行中添加“or die(mysql_error());”并告诉我们代码?还是您已经这样做了并且没有错误?
  • SQL 在所有尝试使此代码正常工作的过程中从未出现任何错误。感谢您的宝贵时间
猜你喜欢
  • 2015-12-09
  • 2016-05-16
  • 2017-08-28
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 2018-10-18
  • 2011-04-21
  • 1970-01-01
相关资源
最近更新 更多