2010-06-04 47 views
11

nếu ...

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" 
$result = mysql_query($query); 

cho hành động này:

while ($row = mysql_fetch_array($result)){ 
    .... 
} 

là này làm 1 vòng lặp (lặp x lần)?

và cho một này:

$row = mysql_fetch_array($result) 
foreach($row as $r){ 
    ... 
} 

là này làm 2 vòng (lặp x lần)?

trong đó x là số lượng kết quả


EDIT:

ok thanks guys, ok tôi về cơ bản phrased câu hỏi này thực sự, thực sự tồi tệ.

khi nhìn lại nó cần phải có được

'does mysql_fetch_array() only return one row each time it is called'

tôi một giờ hạnh phúc vì sự hiểu biết của tôi về mysql_fetch_array() là v. Không chính xác!

cảm ơn thời gian của bạn!

+0

Tôi không chắc chắn như thế nào mysql_fetch_array() thực hiện. nó tạo ra một mảng vì vậy tôi nghĩ rằng nó phải được lặp. Tôi tò mò muốn xem liệu * trong khi ($ row = mysql_fetch_array ($ result)) * có thể nhận được thao tác tức là str_irepalce() bên trong vòng lặp ban đầu đó – Haroldo

+0

+1 để làm rõ –

Trả lời

21

I'm assuming mysql_fetch_array() perfroms a loop, so I'm interested in if using a while() in conjunction with it, if it saves a nested loop.

số mysql_fetch_array chỉ trả về hàng tiếp theo của kết quả và tiến bộ con trỏ bên trong. Nó không lặp lại. (. Bên trong nó có thể hoặc không thể sử dụng một số vòng lặp ở đâu đó, nhưng đó là không thích hợp)

while ($row = mysql_fetch_array($result)) { 
    ... 
} 

này thực hiện như sau:

  1. mysql_fetch_array lấy và trả lại hàng bên cạnh
  2. hàng được gán cho $row
  3. biểu thức được đánh giá và nếu nó được đánh giá là true, nội dung của vòng lặp được thực hiện
  4. the pr ocedure bắt đầu một lần nữa
$row = mysql_fetch_array($result); 
foreach($row as $r) { 
    ... 
} 

này thực hiện như sau:

  1. mysql_fetch_array lấy và trả lại hàng bên cạnh
  2. hàng được gán cho $row
  3. foreach vòng qua các nội dung của mảng và thực thi nội dung của vòng lặp nhiều lần vì có các mục trong mảng

Trong cả hai trường hợp mysql_fetch_array thực hiện chính xác điều tương tự. Bạn chỉ có nhiều vòng lặp khi bạn viết. Cả hai cấu trúc không làm điều tương tự mặc dù. Thứ hai sẽ chỉ hoạt động trên một hàng của kết quả, trong khi đầu tiên sẽ lặp lại trên tất cả các hàng.

1

Phụ thuộc vào số hàng được trả về trong $results và số cột có trong $row?

+1

nhiều hàng, nhiều cols – Haroldo

1

Chỉ xem xét một hàng được trả về, chỉ một vòng lặp sẽ được thực hiện trong cả hai trường hợp. Mặc dù nó sẽ kiểm tra vòng lặp nhập vào điều kiện hai lần trên mỗi.

+1

xem nhận xét khác: nhiều hàng, nhiều cols – Haroldo

1

Đối với chương trình đầu tiên: chương trình của bạn sẽ đi qua vòng lặp một lần cho mỗi hàng trong tập kết quả được trả về bởi truy vấn. Bạn có thể biết trước số lượng kết quả bằng cách sử dụng mysql_num_rows().

Đối với câu hỏi thứ hai: lần này bạn chỉ sử dụng một hàng của tập hợp kết quả và bạn đang làm điều gì đó cho từng cột . Đó là những gì mà cấu trúc ngôn ngữ foreach thực hiện: nó đi qua phần thân của vòng lặp cho mỗi mục nhập trong mảng $row. Số lần chương trình sẽ đi qua vòng lặp là có thể biết trước: nó sẽ trải qua một lần cho mỗi cột trong tập kết quả (có lẽ bạn biết, nhưng nếu bạn cần xác định nó bạn có thể sử dụng count($row)).

+1

ah ok xin lỗi im không được rõ ràng về điều này, tôi sau ** bao nhiêu vòng ** không bao nhiêu lần lặp của vòng lặp – Haroldo

+0

Trong mỗi ví dụ của bạn chỉ có một vòng lặp. Mặt khác, nếu bạn đã làm 'while ($ row = mysql_fetch_array ($ result)) {foreach ($ row as $ r) {...}}' sẽ là hai vòng, một vòng được lồng vào bên trong. – Hammerite

+0

im không đề nghị đặt foreach() bên trong while(), tôi chỉ tự hỏi liệu nó có hiệu quả ngang bằng để sử dụng một while() trên fetch_array() như vòng lặp sau đó với foreach() – Haroldo

1

Hàng đầu tiên:

$result = mysql_query($query); 

trở lại nguồn php db.

Hàng thứ hai

while ($row = mysql_fetch_array($result)) 

Loops tất cả các hồ sơ được trả về bởi truy vấn.

Sử dụng mysql_fetch_assoc thay vì
Trong trường hợp đó hàng có cặp khóa => giá trị.
Trong khi chỉ cần đặt này:
print_r($row) và bạn sẽ hiểu
Nếu bạn sử dụng mysql_fetch_assoc định dạng của dòng sẽ là:

$row["column1_name"] = column1_value; 
$row["column2_name"] = column2_value; 

Đối với cái này:

$row = mysql_fetch_assoc($result) 
foreach ($row as $columnName => $columnValue) { 
    ... 
} 

Bạn sẽ có được hàng linh sam từ truy vấn và bạn sẽ lặp lại tất cả các cột trong kết quả đầu tiên của truy vấn.

1
$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" 
$result = mysql_query($query); 
if(mysql_num_rows($result)>0) 
{ 
while($row = mysql_fetch_array()) //here you can use many functions such as mysql_fetch_assoc() and other 
{ 
//It returns 1 row to your variable that becomes array and automatically go to the next result string 
    Echo $row['col1']."|".Echo $row['col2']."|".Echo $row['col2']; 
} 
} 
+0

LỖI:
Cảnh báo: mysql_num_rows() dự kiến ​​tham số 1 là tài nguyên, đối tượng được đưa ra trong /opt/lampp/htdocs/MultiDatesPicker/getuser.php trên dòng

1

Có, mysql_fetch_array() chỉ trả lại một kết quả. Nếu bạn muốn truy xuất nhiều hơn một hàng, bạn cần phải thực hiện cuộc gọi hàm trong vòng lặp while.

Hai ví dụ:

này sẽ chỉ trả lại hàng đầu tiên

$row = mysql_fetch_array($result); 

này sẽ trở lại một dòng trên mỗi vòng lặp, cho đến khi không nhiều hàng có sẵn từ kết quả thiết

while($row = mysql_fetch_array($result)) 
{ 
    //Do stuff with contents of $row 
} 
Các vấn đề liên quan