本地正常但CPanel中无法获取MySQL查询$row关联数组值问题
本地正常的PHP代码部署到CPanel后,无法通过关联数组键获取SQL查询值
我的PHP代码在本地环境运行正常,但部署到CPanel服务器后,SQL查询执行成功,print_r($row)能正确打印所有查询结果,但使用$row['name']等关联数组键获取值时返回null,alert($row['name'])也无显示,相关代码如下:
<?php include './sql/connection.php'; $sql = "SELECT id, name, category, price, description, image FROM proizvod"; $result = $conn->query($sql); while($row = $result->fetch_assoc()) { print_r($row); echo "<script>alert(".$row['name'].")</script>"; if($row['category']=='Nargila') $category = 'filter-narg'; else if($row['category']=='Ukus') $category = 'filter-ukusi'; else if($row['category']=='Ostalo') $category = 'filter-ostalo'; echo '<div class="col-lg-4 col-md-6 shop-item '. $category .'"> <div class="product shadow-lg rounded-2" data-aos="fade-up" data-aos-delay="100"> <a href="shop-details.php?id='. $row['id'] .'"> <div class="product-img"> <img src="./assets/img/shop/'. $row['image'] .'" class="img-fluid" alt="'. $row['description'] .'"> <div class="social"> <i class="fa-solid fa-plus fa-xs me-2"></i>Više </div> </div> <div class="product-info mt-1 py-2"> <span>'. $row['category'] .'</span> <h4>'. $row['name'] .'</h4> <h3 class="mt-3">'. $row['price']-1 .' RSD</h3> </div> </a> <a href="./pages/delete.php?id='. $row['id'] .'" onclick="return confirm(\'Da li si siguran da hoćeš da izbriseš?\')" class="btn btn-primary-outline text-danger mb-2 admin">Izbriši</a> <form action="" method="POST"> <input name="id" type="text" class="d-none" value="'. $row['id'] .'"> <button class="btn w-100 py-3 bg-theme" name="add-to-cart" type="submit"> <i class="fa-solid fa-cart-plus fa-xl me-3"></i>Dodaj u korpu </button> </form> </div> </div>'; } ?>
解决步骤
修正数组键名大小写
Linux环境下的PHP对数组键名大小写敏感,而本地Windows环境通常不敏感。查看print_r($row)的输出,确认字段键名的实际大小写(比如是否是Name而非name),将代码中所有$row['xxx']的键名修改为与输出完全一致的大小写。统一SQL查询的字段别名(可选)
如果不想修改代码中的键名,可以在SQL语句中为每个字段指定小写别名,确保返回的关联数组键统一为小写:$sql = "SELECT id AS id, name AS name, category AS category, price AS price, description AS description, image AS image FROM proizvod";修复JS alert语法错误
原代码中的alert语句会导致JS语法错误(字符串未加引号),修改为:echo "<script>alert('".addslashes($row['name'])."')</script>";使用
addslashes()可以避免name值包含单引号时破坏JS语法。修正价格计算的优先级问题
原代码中$row['price']-1会先执行字符串拼接再做减法,导致计算错误,添加括号确保优先级:<h3 class="mt-3">'. ($row['price'] - 1) .' RSD</h3>
内容的提问来源于stack exchange,提问作者Ognjen Kukalj
相关产品推荐
相关产品推荐

