Re: [請益] mysql_fetch_array 取出的陣列數
※ 引述《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)
→
07/27 22:21, , 1F
07/27 22:21, 1F
推
07/27 22:40, , 2F
07/27 22:40, 2F
→
07/27 22:49, , 3F
07/27 22:49, 3F
→
07/27 23:03, , 4F
07/27 23:03, 4F
※ 編輯: tkdmaf 來自: 59.104.131.235 (07/27 23:06)
→
07/27 23:08, , 5F
07/27 23:08, 5F
推
07/28 00:00, , 6F
07/28 00:00, 6F
推
07/28 03:08, , 7F
07/28 03:08, 7F
推
07/28 08:56, , 8F
07/28 08:56, 8F
推
07/28 13:41, , 9F
07/28 13:41, 9F
討論串 (同標題文章)