mysqli_fetch_assoc()参数类型错误排查及分页代码问题求助
排查 mysqli_fetch_assoc() 参数错误及修复方案
首先,先明确你遇到的错误:
警告:mysqli_fetch_assoc()期望参数1为mysqli_result类型,在C:\xampp\htdocs\biservis\profil.php第199行传入了布尔值。
错误原因分析
我看了你的代码,发现几个关键问题:
- 表名拼写不一致:你统计数据的查询用的是
FROM yayin,但后面所有查询用户发布内容的SQL用的都是FROM yayinlar。如果你的数据库里只有yayinlar表,那第一个统计查询肯定会失败,mysqli_query()会返回false(布尔值),这时候你把false传给mysqli_fetch_assoc(),自然就触发了这个警告。 - 未检查查询是否成功:你直接把
mysqli_query()的结果传给mysqli_fetch_assoc(),完全没考虑查询失败的情况——这是新手常犯的错误,数据库查询很容易因为表名错、权限问题、连接失效等原因失败。 - 变量名不匹配:你统计的时候用的别名是
AS yayinlar,但后面取总数的时候写的是$sonuc['yayin'],这会导致$toplam_icerik变成null,分页逻辑也会跟着出问题。
修复方案
1. 先修正最核心的表名错误
把统计查询的表名改成yayinlar,和其他查询保持一致:
// 错误的统计查询 $goster = mysqli_query($mysqlicon, 'SELECT COUNT(*) AS yayinlar FROM yayin'); // 修正后 $goster = mysqli_query($mysqlicon, 'SELECT COUNT(*) AS yayinlar FROM yayinlar');
2. 给查询加上错误检查
每次执行mysqli_query()后,都先判断是否成功,避免把false传给结果处理函数:
$goster = mysqli_query($mysqlicon, 'SELECT COUNT(*) AS yayinlar FROM yayinlar'); // 检查查询是否失败 if (!$goster) { // 开发环境可以直接输出错误,生产环境建议记录日志 echo '数据库查询失败: ' . mysqli_error($mysqlicon); exit; } $sonuc = mysqli_fetch_assoc($goster);
3. 修正变量名不匹配的问题
你统计的别名是yayinlar,所以取总数的时候要对应上:
// 错误的写法 $toplam_icerik = $sonuc['yayin']; // 修正后 $toplam_icerik = $sonuc['yayinlar'];
4. 优化分页逻辑,避免重复查询
你的代码里分页查询$sorgugst没有过滤uye_id,然后又在循环里重新查询$sorguyayin,这不仅效率低,还会导致分页失效。建议直接在分页查询里加入用户ID过滤:
// 修正后的分页查询,直接过滤当前用户的内容 $sorgugst = mysqli_query($mysqlicon, "SELECT * FROM yayinlar WHERE uye_id='$uye_id' LIMIT $limit, $sayfada"); // 直接遍历这个结果集,不用嵌套查询 while($kayit = mysqli_fetch_assoc($sorgugst)) { ?> <div class="yayinla"> <div class="yayinci"> <div class="yay-ad">Yayıncı Adı: <?php echo $adi ?></div> <div class="yay-hiz">Verdiği Hizmet: <?php echo $verilen_hizmet ?></div> <div class="yay-hiz">Yayın Tarihi: <?php echo $yayin_tarihi ?></div> <div class="edit"> <div class="duzenle"> <a href="yayin-duzenle?id=<?php echo $kayit["id"]; ?>"> <img src="images/duzenle.png" alt="Düzenle" /> </a> </div> <div class="sil"> <a href="yayin-sil?id=<?php echo $kayit["id"]; ?>"> <img src="images/cop.png" alt="Çöp" /> </a> </div> <div class="temizle"></div> </div> <div class="temizle"></div> </div> <div class="icerik"> <div class="profil-resmi"><img src="<?php echo $firma_logolari; ?>" class="img-fluid" alt="Responsive image"></div> <div class="yayin"><?php echo $kayit["yayin"]; ?></div> <div class="temizle"></div> </div> <div class="temizle"></div> </div> <?php }
5. 额外提醒:防范SQL注入
直接把$uye_id、$limit这些变量拼到SQL里有SQL注入风险,建议用mysqli的预处理语句,比如:
// 预处理分页查询,防止注入 $sorgugst = mysqli_prepare($mysqlicon, "SELECT * FROM yayinlar WHERE uye_id = ? LIMIT ?, ?"); // 绑定参数,"iii"表示三个整数类型的参数 mysqli_stmt_bind_param($sorgugst, "iii", $uye_id, $limit, $sayfada); mysqli_stmt_execute($sorgugst); // 获取结果集 $result = mysqli_stmt_get_result($sorgugst); while($kayit = mysqli_fetch_assoc($result)) { // 处理数据 }
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

