2011-11-27 37 views
17

một đơn giảnSử dụng truy vấn hai lần mysql_fetch_array

$stuff = mysql_query("SELECT * FROM users"); 

while($s = mysql_fetch_array($stuff)){ 
# .... 
} 

while($r = mysql_fetch_array($stuff)){ 
# ... 
} 

khi cuối cùng() không hoạt động. Tôi đã cố gắng chạy foreach ($ thứ như $ s) nhưng sau đó tôi nhận được lỗi mảng không hợp lệ.

Tôi có thể sử dụng cùng một truy vấn hai lần như thế nào?

+0

Tôi nghĩ rằng bạn cần phải đặt lại mảng vào đầu trước khi cố gắng sử dụng lại khi bạn đã đạt đến điểm kết thúc từ tập kết quả đầu tiên. –

+2

xin vui lòng, ngừng sử dụng các hàm 'mysql_ *' đã lỗi thời để tìm hiểu cách sử dụng [PDO] (http://php.net/pdo) và các câu lệnh chuẩn bị. –

Trả lời

35
$stuff = mysql_query("SELECT * FROM users"); 

while($s = mysql_fetch_array($stuff)){ 
# .... 
} 
// add this line 
mysql_data_seek($stuff, 0); 

while($r = mysql_fetch_array($stuff)){ 
# ... 
} 

Nên làm các trick

Một cách khác là tất nhiên để lưu trữ kết quả của bạn trong một mảng và tái sử dụng mà

+3

'mysql_data_seek ($ stuff, 0);' Đây là hướng dẫn sử dụng: [mysql_data_seek function] (http://www.php.net/manual/en/function.mysql-data-seek.php) –

+0

không có từ nào. .. thanx .. awesome :) –

0

thấy docs

Tôi đoán đó là vì

Trả lại một mảng tương ứng với hàng đã tìm nạp và mo ves con trỏ dữ liệu nội bộ phía trước.

Tôi nghĩ rằng di chuyển con trỏ dữ liệu với mysql_data_seek() sẽ thực hiện công việc Nhưng tôi nghĩ rằng đây không phải là một cách tốt, bạn thường nên lấy dữ liệu từ cơ sở dữ liệu một lần và lưu trữ chúng

+1

Thực ra, phương pháp đầu tiên bạn đề xuất là lựa chọn tốt. – Starx

+0

vâng tôi biết rằng, tôi chỉ muốn nói rằng nó tốt hơn để sử dụng kết quả một lần nếu có thể –

2
 
$stuff = mysql_query("SELECT * FROM users"); 

while($s = mysql_fetch_array($stuff)){ 
# .... 
} 
mysql_data_seek($stuff, 0); 
while($r = mysql_fetch_array($stuff)){ 
# ... 
} 
//ref: http://www.php.net/manual/en/function.mysql-data-seek.php 
-1

Nếu bạn người sử dụng "foreach" thay vì "trong khi" bạn sẽ không có bất kỳ vấn đề và không cần phải mysqli_seek_data():

//1st loop : 
foreach($stuff as $row) 
{ 
    echo $row['...']; 
} 
... 
//2nd loop : 
foreach($stuff as $row) 
{ 
    echo $row['...']; 
} 
0

Dưới đây là một giải pháp đơn giản hơn:

$slq = "SELECT * FROM users"; 

$stuff1 = mysql_query($slq); 

while($s = mysql_fetch_array($stuff1)){ 
# .... 
} 

$stuff2 = mysql_query($slq); 

while($r = mysql_fetch_array($stuff2)){ 
# ... 
} 

Gán sql thành biến và gọi mysql nhiều lần.

không còn mysql nữa. sử dụng mysqli hoặc pdo

Các vấn đề liên quan