SQL查询结果正确编码供JavaScript解码及title[0]仅返回首字符问题排查
问题原因
- 后端调用
mysqli_fetch_array($result)拿到的是单条查询结果的一维数组,经过json_encode序列化后返回给前端的结构中,title字段本身就是完整的字符串值,并非存储标题的数组。 - JavaScript 中直接对字符串使用
[索引]语法访问时,会返回该索引位置对应的单个字符,所以你执行myArr.title[0]才会仅返回标题的第一个字符。
解决方法
方案1:仅需获取单条标题的完整内容
直接去掉title后的索引即可,修改前端success回调中的代码:
success:function(html) { const myArr = JSON.parse(html); document.getElementById("title").innerHTML = myArr.title; }
方案2:确实需要将标题存入数组第0位使用
调整后端返回数据的构造逻辑,把title字段的值放到数组中再序列化返回:
if( mysqli_num_rows($result)>0 ) { $row = mysqli_fetch_array($result); // 自定义返回结构,将title存入数组 $returnData = [ 'title' => [$row['title']] // 其他需要返回的字段可在此处追加 ]; echo json_encode($returnData); }
调整后前端myArr.title[0]即可正常获取完整的标题内容。
额外安全提示
你当前的SQL语句直接拼接用户传入的$username和$orderid参数,存在严重的SQL注入漏洞,建议修改为参数绑定的预处理写法:
$stmt = mysqli_prepare($conn, "SELECT * FROM `permissions` WHERE `username` = ? AND `orderid` = ?"); mysqli_stmt_bind_param($stmt, "ss", $username, $orderid); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt);
内容的提问来源于stack exchange,提问作者xenos
相关产品推荐
相关产品推荐

