第三次提问,不知道哪里出了问题?

第三次提问,不知道哪里出了问题?

视频截图:

http://img1.sycdn.imooc.com//climg/5c2c6e100001075613200680.jpg

我的代码(代码里的SQL字段名没错,我的与老师的有点不同):注意第38行的注释,没有用*,莫非是这里的原因造成的?

include_once './lib/fun.php';
//判断是否登录
if ($login = checkLogin()) {
    $user = $_SESSION['user'];
}
//商品查询
$con = mysqlInit('localhost', 'root', '', 'imooc_mall');
if(!$con){
    exit (mysqli_errno($con));
}
//分页:
//检查page参数
//page 就是指的第几页
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
//$page 与1 比取其中最大值
$page = max($page, 1);
//一页显示几个
$pageSize = 5;
//算法演示
// page = 1 limit 0,2 //因为偏移量是从0开始的!
// page = 2 limit 2,2
// page = 3 limit 4,2
//可以发现 limit之后的这个 偏移量 就是(page-1)*pageSize;
$offset = ($page - 1) * $pageSize;
//获得总页数
$sql = "SELECT COUNT(`id`) AS total FROM `im_goods` WHERE `status`=1";
$obj = mysqli_query($con, $sql);

//var_dump($obj);
//if (!$obj) {
//    msg(2, "还没有一幅画", "publish.php");
//}
$result = mysqli_fetch_assoc($obj);
//var_dump($result);
$total = isset($result['total']) ? $result['total'] : 0;
unset($sql, $obj, $result);
//注意!!order 只能在limit之前不能再之后!
//这里这么写是老师说这样可以减少服务器的压力!
$sql = "SELECT `id`,`name`,`pic_id`,`des` FROM `imooc_mall`.`im_goods` ORDER BY `id` ASC,`view` DESC  LIMIT {$offset},{$pageSize} WHERE `status`=1";
$obj = mysqli_query($con, $sql);
//if (!$obj) {
//    msg(2, "还没有一幅画", "publish.php");
//}
//var_dump($obj);die;
//因为不止查询一次所以用循环
//用一个数组记录每次取出的记录
$goods = array();
while ($result = mysqli_fetch_assoc($obj)) {
    $goods[] = $result;
}
//分页
$pages = pages($total, $page, $pageSize, 7);

报错:

http://img1.sycdn.imooc.com//climg/5c2c6f8d000199ea13650659.jpg


我的解决方式:

if (!$obj) {
   msg(2, "还没有一幅画", "publish.php");
}

但是之前的

$sql = "SELECT COUNT(`id`) AS total FROM `im_goods` WHERE `status`=1";
$obj = mysqli_query($con, $sql);

这里倒是没有报错。

最后打印下 mysqli_query后的结果一次是总页数,一次是画品详情,对应”我的代码“,简单做了注释

http://img1.sycdn.imooc.com//climg/5c2c71630001fbb913650661.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

您好,根据您的报错信息为48行错误,mysqli_fetch_assoc 这个函数的第一个参数应该是个资源句柄,而在实际执行过程中,这个值实际上是个boolean(布尔值)。SQL语句错误,导致查询错误。limit条件应该位于SQL语句的最后,where条件写在order by之前。祝学习愉快!

  • 轩辕小齐V 提问者 #1
    这个代码确实 没问题,因为我原来的代码就没加 WHERE `status`=1" 我只是发现这里有问题我现加的 ,没注意有limit,但是其他截图是没加这个where条件前的。只要没有数据库没有数据,就返回false。刚才测试一下 修改了where语句位置没有数据还是有问题。
    2019-01-02 19:21:09
  • 好帮手慕查理 回复 提问者 轩辕小齐V #2
    您好,那么直接打印sql语句,使用sql语句在数据库中查询是否能查询到数据呢?查询时返回的是什么?是错误信息,还是没有任何数据。祝学习愉快!
    2019-01-03 10:49:57
  • 轩辕小齐V 提问者 回复 好帮手慕查理 #3
    老师,请问 where order by limit的顺序如何?
    2019-01-06 16:13:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
PHP小白零基础入门
  • 参与学习           人
  • 提交作业       626    份
  • 解答问题       4930    个

想要学好Web后端开发的中流砥柱语言,本阶段为你轻松铺就扎实的基础,从前端网页布局的搭建到后台PHP开发,助你从零基础到掌握主流开发语言。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师