作者tkdmaf (皮皮快跑)
看板PHP
标题Re: [请益] mysql_fetch_array 取出的阵列数
时间Wed Jul 27 22:00:12 2011
※ 引述《ptt2000 (ptt20000)》之铭言:
: 各位好
: 小弟因mysql_fetch_array取出的阵列数感到疑惑
: 我下的SQL为
: select A,B from test where C=1;
: 在myadmin下确实找到AB这两个值
: 但是使用$X = mysql_fetch_array後
: count($X) = 4
: 其中
: $X[0] = A
: $X[1] = B
: $X[2] = 空白
: $X[3] = 空白
: 请问搜寻两个栏位,count後应该等於2
: 为什麽会等於4呢??
: 而且最後两个还是空白的
: 请问是哪边错了呢??
: 感谢大大解惑...
: 谢谢。
还是专文回您好了。
$row = mysql_fetch_row();
就是按照栏位的顺序以阵列从0开始的方式传递每一栏的资料。
基本而言这个习惯是针对其他语言转过来的人而用的。
因为php的阵列是比较特立独行在於他可以用「文字」做为阵列的索引名称。
但事实上反过来说,习惯於使用栏位名称做为取值的人可能就很不习惯这个做法。
取出来的是$row[0],$row[1]......
$row = mysql_fetch_assoc();
就是按照栏位的名称做为阵列的索引名称。
习惯php以名称取阵列名的人可能就很习惯这种用法。
取出来的是$row['name'],$row['address'],$row['sex'].....等
$row = mysql_fetch_object();
将资料以栏位名称做为资料物件的属性名称。
习惯於物件导向操作的人就会习惯这样的模式。
当然啦!这个资料物件是程式产生的所以你除了属性之外也没办法能对他做其他的事。
(比如让这个资料物件提供方法这种事当然不行。)
不过php比较诡异的地方就是说………
foreach()除了可以解阵列……他连物件的属性都可以解。
基本上不建议使用mysql_fetch_array()的原因即在於他是将
mysql_fetch_row()和mysql_fetch_assoc()两种都取。
这麽一来在计算阵列或是用foreach去解的话等於是解两倍的资料。
当然就容易发生一些不该发生的错误。
小知识:
资料类别的定义方式:
<?php
class row{}
$row = new row;
$row->name = 'sam';
$row->address = 'taipei';
$row->sex = 'male';
foreach($row as $key => $value){
echo "{$key} => {$value}<BR>";
}
?>
就会印出:
name => sam
address => taipei
sex => male
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.131.235
※ 编辑: tkdmaf 来自: 59.104.131.235 (07/27 22:02)
1F:→ gpmm:你真的每次都令人很惊奇… XD 07/27 22:21
2F:推 ptt2000:感谢您详细的解答 万分感谢! 07/27 22:40
3F:→ gpmm:给楼上,有些观念试着多方求证会更好,别人说的不一定是对的 07/27 22:49
4F:→ tkdmaf:所以楼上,有那边写错了可否请您指正是幸? 07/27 23:03
※ 编辑: tkdmaf 来自: 59.104.131.235 (07/27 23:06)
5F:→ tkdmaf:基本上敝人打字很快,所以会有心不到手到,请见谅。 07/27 23:08
6F:推 Fantasywind:很清楚的解说呢! 07/28 00:00
7F:推 seiram:厘清了模糊很久的观念,大推 07/28 03:08
8F:推 cokellen:喔喔 帮你推一下 07/28 08:56
9F:推 under0c:赞喔 好文章 07/28 13:41