【问题标题】:PHP json_encode displays empty string from mySQLiPHP json_encode 显示来自 mySQLi 的空字符串
【发布时间】:2019-07-15 23:57:25
【问题描述】:

我做了一些研究,结果发现如果字符串不是 UTF8 格式,就会发生这种情况。

但是,经过大量测试,我可以说它确实是 UTF8(或者至少我 100% 确定它是 ASCII 格式),所以很清楚,这不可能。

json_encode 是否需要满足其他任何限定条件?

这是我的代码;

  for($i=0; $i<$addNovelCount; $i++) {
    $query = "SELECT * 
              FROM `NovelPages` 
              WHERE `NovelID` = '".mysqli_real_escape_string($link, $novelResults[$i])."'";
    $result = mysqli_query($link, $query);

    while ($row = mysqli_fetch_assoc($result)){
       $Novel[] = $row['Image'];
       $NovelID[] = $row['NovelID'];
       $PageID[] = $row['ID'];
    }
  }

  echo '<script>alert("'.json_encode($PageID).'");</script>';

【问题讨论】:

  • 首先检查数组$PageID是否真的包含一些东西。我知道这是一个长镜头,但如果查询没有返回任何行,那么$PageID 将是空的。还 $addNovelCount 中的内容是 0,那么外循环将永远不会运行
  • @RiggsFolly $PageID 返回 2 个元素,都是数字。我打开浏览器控制台并收到一堆错误消息,上面写着“未捕获的语法错误:无效或意外令牌”,然后是“在 p (jquery.min.js:2) at p (jquery.min.js:2) at Ja (jquery.min.js:3) at r。 fn.init.append (jquery.min.js:3) at r.fn.init. (jquery.min.js:3) --- 例如,还有更多。顺便说一句,注入攻击头向上
  • json_encode 已经在需要时添加了外部引号。将它包装在 alert() 调用中是没有意义的。另外,不要猜测问题,而是查看真实的 HTML 输出。
  • @mario 真正的 HTML 输出是什么意思?
  • mysqli_real_escape_string() 是个坏消息 user9391457 就像@RiggsFolly 指出的那样,该函数旨在用于 SQL 字符串,在我认为是 NovelID 的 INT 数据类型上使用它可能会永远使用 MySQL如果自动转换搞砸了,则该列上的索引。此外,如果不使用mysqli_set_charset() 设置默认字符集,该功能是不安全的,它在手册中..

标签: php mysql json mysqli


【解决方案1】:

您无法提醒 json_encoded 数据或数据数组,请尝试 console.log 结果 希望这能解决您的问题。

 echo '<script>console.log("'.json_encode($PageID).'");</script>';

【讨论】:

  • 是的,您可以,只是不要添加外部双引号
【解决方案2】:

我解决了这个问题,它是如此简单和虎头蛇尾我想死......尤其是我花了好几天研究这个!

原来是因为我将 json 放在引号中,这在数组中创建了双引号,从而破坏了语法。这让我很失望,因为我使用警报作为调试我试图修复的真实事物的一种方式,它使用 json 将 php 变量放置在 javascript cookie 中,而不是......

$linkSearchCacheJson = json_encode($linkSearchCacheCleared);

echo'
    <script>
        var cookieVar = '.$linkSearchCacheJson.';
        alert(cookieVar);
        document.cookie = "linkSearchCache = " + cookieVar;
    </script>
';

我在做...

echo'
    <script>
        document.cookie = "linkSearchCache = '.json_encode($linkSearchCacheCleared).'";
    </script>
';

这再次破坏了语法,因为它将双引号放在双引号内。

故事的寓意; json_encode 将变量用双引号括起来。

【讨论】:

  • 用一堆字符串连接代替echo,只是?&gt;&lt;script&gt;...&lt;?php echo json_encode(...) ?&gt;...&lt;?php等等。这里的关键是 JSON 使用双引号,所以你不能在没有额外转义的情况下对 JSON 字符串进行双引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 2017-10-15
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多