<?
$link=mysql_connect('localhost','root','5225')or die('Could not connect:'.mysql_error());
mysql_select_db('matv')or die ('Could not select database');
$level="SELECT CategoryName FROM ma_category where CategoryLevel=1 ";
mysql_query('set Names "UTF8"');  /*db编码转为utf-8,要先转再查询,不然会乱码*/
$result=mysql_query($level); /*执行sql语句*/
$row=mysql_fetch_array($result);
$thename=$row['theName'];while($line = mysql_fetch_array($result,MYSQL_ASSOC))
    {
  echo "<div class='menu_top'><a target='_self' class='menu_a' href=''>{$line['CategoryName']}</a></div>";
}
mysql_free_result($result);
mysql_close($link);
?>
这段代码是我自己写的一个小的菜单  在论坛朋友们的帮助下  实现了其功能  但是有很多小的地方不是很明白  我希望把他弄懂 不然的话以后自己还是不会   也希望以后可以帮助其他朋友
1· 第三行在select的时候  前面的$level只是走个过场么?其命名貌似无所谓  就是个变量?
2·执行完sql语句后  $row把结果保留为数组  好像使这个意思   那如果我前面比如计算了一个搜索的和  在select中count了一下  那么搜索结果应该是一个数字  这个数字我要怎么提取  书上写的是$num_results=mysqli_num_rows($result) 求白话文解释一下  
3· $thename=$row['theName']  这句话是将结果数组赋给$thename?  如果是的话 为什么我不能直接调用$row 感觉多余  而且后面的语句while也没有用到$thename  是不是我写多了?
4·while循环里面的$line  也是自定义变量么?  括号里面的MYSQL_ASSOC是什么意思啊?纯新手问题  谢·

解决方案 »

  1.   

    好吧,虽然我也是新手,跟楼主共勉以下,说的不对,楼下高手帮忙改下吧:
    1.$level命名无所谓,可以是$a,$b,$c....
    2.mysql_num_rows:取得结果集中行的数目
    3.mysql_fetch_array是从结果集中取得一行作为关联数组,或数字数组,或二者兼有,$row['xxx']是数组中的一个元素
    4.干嘛还要搞个$line,上面的$row直接可以用啊,后面那个什么意思真不知道
      

  2.   

    1.yes2.$result是个句柄,并不是一个具体的内容,要取得里面的内容,还需要解析的函数
    就如$f=fopen(...)那样,$f也是个打开的句柄,不是具体的返回值3.貌似
    $row=mysql_fetch_array($result);
    $thename=$row['theName'];
    这两句在这里是多余的,没作用,而且这样写有问题,因为如上所说,$result是需要按记录行逐个返回的4.MYSQL_ASSOC看手册关于mysql_fetch_array()的说明,按字段名返回数组key
    $line是逐行读取结果的,读完一行$result就会向下跳,while循环就是判断$result完了没有
    每一行记录$line都会重新赋值,就是载入每条记录
      

  3.   

    1、 第三行在select的时候 前面的$level只是走个过场么?其命名貌似无所谓 就是个变量?
    是的就是一个变量,一般取名 $sql、$sqlstr 比较直观2-1、执行完sql语句后 $row把结果保留为数组 好像使这个意思  
    这里不是保存为数组,而是取结果集中的第一条记录。这样一来下面的while循环是从第二条记录开始输出的。这一点需要认真对待,你可能并不需要放弃第一条记录2-2、 那如果我前面比如计算了一个搜索的和 在select中count了一下 那么搜索结果应该是一个数字 这个数字我要怎么提取 书上写的是$num_results=mysqli_num_rows($result) 求白话文解释一下 
    你要这样提取
    如果
    $sql = 'select count(*) from tbl_name';
    $rs = mysql_query($sql);
    $row = mysql_fetch_array($rs);
    echo $row[0];
    echo $row['count(*)'];如果
    $sql = 'select count(*) as cnt from tbl_name';
    $rs = mysql_query($sql);
    $row = mysql_fetch_array($rs);
    echo $row[0];
    echo $row['cnt'];3、$thename=$row['theName'] 这句话是将结果数组赋给$thename? 如果是的话 为什么我不能直接调用$row 感觉多余 而且后面的语句while也没有用到$thename 是不是我写多了?
    至少在目前的代码中是多写了
    $thename=$row['theName'] 的意思是将数组 $row 的名为 theName 的元素的值赋给变量 $thename4、while循环里面的$line 也是自定义变量么? 括号里面的MYSQL_ASSOC是什么意思啊?
    是的,一般用 $row,不过 $line 也是行的意思
    MYSQL_ASSOC 表示只取关联数组
      

  4.   

    1.就是随便取个变量名,目的是执行这个sql语句时用的,第五行用到
    2.比如 
    $sql="select * from 表名;
    $result=mysql_query($sql);
    $num=mysql_num_rows($result)意思就是查询这个表中所有的记录,返回一个数字,也就是总条数
    你可以echo $num;会显示一个数字;
    3.$thename=$row['theName'] 中括号里面的是数据库表中的字段名,意思是取出字段中的值赋给变量$thename
    在这里这句话确实多余的;
    4.这里 既然你上面已经写了$row=mysql_fetch_array($result); 那么while($row){}直接用就可以了
    $line['CategoryName']我觉得你是不是写错了,括号里不是你的表名嘛,应该写字段名吧
      

  5.   


    确实  你不说我还真丢了一条记录  那么$row的第一条记录怎么输出啊?
      

  6.   

    $row=mysql_fetch_array($result);
    我是不是没有必要遍历每一条然后赋值给$row   我删除了这句话  没有影响  
      

  7.   

    看我说的和唠叨老大说的结合一下理解你那两句是多余的,会引起第一条记录的指针向下移动,while是从第二条开始读取的,echo输出就少了一条