You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP报错Uncaught TypeError:无法访问字符串偏移量问题求助

问题分析与解决

错误根源

  1. 查询返回值错误:getReviewByCar函数里用了fetch(),它默认返回单条记录的混合数组(同时包含关联键["review"]和索引键[0]),所以$reviews是单条评论的字段集合,不是多条评论的数组。
  2. 循环逻辑错误:前端循环把单条评论的字段数组当成了评论列表遍历,循环时$review会拿到字符串值(比如"Great Car"),此时尝试访问$review['review']相当于对字符串使用数组偏移,直接触发Uncaught TypeError。
  3. CSS失效原因:PHP抛出致命错误后会终止执行,导致后续页面的CSS引用或样式代码无法正常输出,所以页面样式失效。

修复方案

1. 修改查询函数,返回所有评论

把fetch()改成fetchAll(),并指定关联数组模式,避免多余的索引键:

function getReviewByCar($pdo, $id) {
    $parameters = [':id' => $id];
    $query = query($pdo, 'SELECT review FROM car_review
    INNER JOIN vehicle ON car_review.vehicle_id = vehicle.vId
    WHERE vehicle_id = :id', $parameters);
    // 返回所有评论的关联数组集合
    return $query->fetchAll(PDO::FETCH_ASSOC);
}

2. 调整前端循环逻辑

现在$reviews是多条评论的数组,每条评论是包含review字段的关联数组,循环可以正常遍历:

<div class="review-text">
    <?php foreach ($reviews as $review) : ?>
        <p><?php echo htmlspecialchars($review['review'], ENT_QUOTES, 'UTF-8') ?></p>
    <?php endforeach; ?>
</div>

额外优化:处理无评论的情况

可以加上空数组判断,避免空循环或错误:

<div class="review-text">
    <?php if (!empty($reviews)) : ?>
        <?php foreach ($reviews as $review) : ?>
            <p><?php echo htmlspecialchars($review['review'], ENT_QUOTES, 'UTF-8') ?></p>
        <?php endforeach; ?>
    <?php else : ?>
        <p>暂无评论</p>
    <?php endif; ?>
</div>

内容的提问来源于stack exchange,提问作者wannabephp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:45:04