// 根据二级分类ID获取资源列表 $sql = "SELECT COUNT(*) as total FROM red_resources WHERE subcategory_id='" . $subcategoryId . "'"; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_assoc($result); $total = $row['total']; echo '<p style="text-align: right; color: blue; font-size: 20px;">类型:' . $row["subcategory_id"] . ', 共有' . $total . '个资源 </p>'; 为什么$row["subcategory_id"] 无法输出?
时间: 2024-04-01 09:35:13 浏览: 77
从你提供的代码来看,可能是 $row 数组中没有 subcategory_id 这个键名。你可以通过打印 $row 数组来确认键名是否正确。如果不正确,你需要查找 SQL 查询语句是否正确,是否包含了 subcategory_id 字段。如果正确,可以尝试将 SQL 查询语句中的别名去掉,即将 COUNT(*) 改为 COUNT(subcategory_id)。
相关问题
// 根据二级分类ID获取资源列表 $sql = "SELECT * FROM red_resources WHERE subcategory_id='" . $subcategoryId . "'"; $result = mysqli_query($conn, $sql); 获取表中$subcategoryId的总数量,应该怎么修改?
如果想获取 $subcategoryId 对应的资源列表中的总数量,可以使用 SQL 的聚合函数 COUNT()。修改后的代码如下:
```php
// 根据二级分类ID获取资源列表
$sql = "SELECT COUNT(*) as total FROM red_resources WHERE subcategory_id='" . $subcategoryId . "'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$total = $row['total'];
```
在上述代码中,我们使用 COUNT(*) 来统计资源列表中的总数量,并使用别名 total 将其命名为 total。然后,我们通过 mysqli_fetch_assoc() 方法获取结果集中的第一行数据,并将其赋值给 $row 变量。最后,我们通过 $row['total'] 来获取总数量,并将其赋值给 $total 变量。
$sql_prev = "SELECT * FROM red_resources WHERE subcategory_id = $subcategoryId AND id < $id ORDER BY id DESC LIMIT 1"; $result_prev = $conn->query($sql_prev);第二行代码有什么问题?
第二行代码没有明显的语法错误,但是可能存在安全问题。
在这行代码中,我们使用用户提供的id值进行SQL查询。如果攻击者能够在URL中注入恶意的id值,那么他们可能会利用这个漏洞进行SQL注入攻击。
为了避免这种情况,我们应该使用预处理语句和绑定参数,例如:
```php
$stmt = $conn->prepare("SELECT * FROM red_resources WHERE subcategory_id = ? AND id < ? ORDER BY id DESC LIMIT 1");
$stmt->bind_param("ii", $subcategoryId, $id);
$stmt->execute();
$result_prev = $stmt->get_result();
```
这样,我们就可以将用户提供的值作为参数绑定到查询语句中,而不是直接将它们嵌入到SQL语句中。这可以有效地防止SQL注入攻击。
阅读全文