【问题标题】:MySQL JSON Encode Data [closed]MySQL JSON编码数据[关闭]
【发布时间】:2013-03-29 17:35:55
【问题描述】:

所以,我有这个 PHP 文件,它以 JSON 形式回显数据:

这是PHP:

// Recieved the user id:
$userId = $_POST['userId'];

// Create connection
$con = mysqli_connect("123.com", "123", "123", "123", "1234");


// Check connection
if (mysqli_connect_errno($con)) {
    echo "Failed to connect to database " . mysqli_connect_error();
}

// Work with the database to grab user statistics..
$getQuizMode      = "SELECT `QuizModeScore` FROM `userstats` WHERE UserId = $userId";
$getChallengeMode = "SELECT `ChallengeModeScore` FROM `userstats` WHERE UserId = $userId";

$quizModeData      = mysqli_query($con, $getQuizMode);
$challengeModeData = mysqli_query($con, $getChallengeMode);

// Build the response
$arr = array('Quiz' => $quizModeData, 'Challenge' => $challengeModeData);

// echo the json back:
echo json_encode($arr);

现在这是我的客户端 javascript:

var variableToSend = "109607962907537440488";

$.post('manageUserStats.php', {userId: variableToSend}, function(data){
    console.log("Got these user stats: ", data);
});

当我看到控制台时,我看到它已记录:

Got these user stats:  {"Quiz":{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null},"Challenge":{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}}

但是,我想获取此处显示的数据:

我做错了什么?为什么我不能只得到这两个数字?

【问题讨论】:

  • 获取数据后,您不会对数据进行任何操作。查看mysql_fetch_assoc 从结果资源中提取数据。此外,您不会清理输入,因此您对 SQL 注入持开放态度,您应该远离 mysql_ 函数。 ^^
  • 提示:从一个查询/值开始。让它工作。然后添加第二个查询。提示2:使用mysqli的OO接口。
  • 提示 #3,您的两个结果都来自具有相同 Id 的同一张表,在一个查询中选择它们,不要浪费资源进行第二次查询。
  • 回显已发布的 userId 并查看是否正确。确保查询中的列拼写正确。显然查询没有返回结果。
  • @Daniel 不正确,看代码,看cmets,回答到目前为止。不要将 OP 指向错误的方向。

标签: php javascript mysql json mysqli


【解决方案1】:

要获得您的工作,请使用:

$getQuiz = "SELECT QuizModeScore, ChallengeModeScore FROM userstats WHERE UserId = $userId";

$res = mysqli_query($con, $getQuiz);
$row = mysqli_fetch_assoc($res);
$quizModeData = $row['QuizModeScore'];
$challengeModeData = $row['ChallengeModeScore'];

代替:

$getQuizMode      = "SELECT `QuizModeScore` FROM `userstats` WHERE UserId = $userId";
$getChallengeMode = "SELECT `ChallengeModeScore` FROM `userstats` WHERE UserId = $userId";

$quizModeData      = mysqli_query($con, $getQuizMode);
$challengeModeData = mysqli_query($con, $getChallengeMode);

此外,您应该在查询中使用$_POST['userId'] 之前对其进行验证。我建议使用 PDO,因为当你参数化 thogh 时,mysqli 很难工作。

编辑

要用作 PDO,请查看如何使用 create a PDO object,然后假设 $pdo 是您用于构造 PDO 的变量的名称。

$query = "SELECT QuizModeScore, ChallengeModeScore FROM userstats WHERE UserId = ?";
$st = $pdo->prepare($query);
$st->execute(array($userId));
$row = $st->fetch(PDO::FETCH_ASSOC);
$quizModeData = $row['QuizModeScore'];
$challengeModeData = $row['ChallengeModeScore'];

【讨论】:

  • 谢谢!有用!我将研究这个 PDO 的事情,但现在我只是一个初学者!谢谢。
  • @Cygwinnian 不客气!如果您只是一个初学者,那么您应该立即开始使用 PDO,这样您就不必改掉任何坏习惯。使用 PDO 的 decent tutorial 可以提供帮助。 ^^
  • @Cygwinnian - 最好尽快开始。 PDO 接管了消毒部分,使用起来更安全。我可以推荐这个管子开始:youtube.com/watch?v=dF8hoPj-1bc。坐下来看节目:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多