2010-08-05 36 views
5

Tôi có một vấn đề nhỏ mà tôi không hiểu. Tôi có một db có một chủ sở hữu và loại (và nhiều hơn nữa khóa học). Tôi muốn có được một danh sách tất cả các giá trị kiểu đó có chủ sở hữu bình đẳng cho người dùng hiện tại, nhưng tôi chỉ nhận được hai kết quảtạo mảng từ truy vấn mysql php

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' ORDER BY id DESC "; 

$result = mysql_query($sql,$con); 

print_r(mysql_fetch_array($result)); 

in ra:

Array ([0] => 18 [type] => 18) 

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' "; 

in ra:

Array ([0] => 16 [type] => 16) 

Và kết quả sẽ giống như 19, 19, 18, 17, 16 trong một mảng. Đó là tất cả các loại có tôi như là chủ sở hữu.

Tôi đã làm việc này ngay bây giờ:

for ($x = 0; $x < mysql_num_rows($result); $x++){ 
$row = mysql_fetch_assoc($result); 
echo $row['type']; 
} 

Ở đây tôi in ra tất cả các giá trị một cách chính xác, nhưng tôi cần phải tạo ra một mảng với tất cả các giá trị. Tôi mặc dù tôi có thể sử dụng array_push, nhưng có nhất là một cách tốt hơn để làm điều đó. Tôi nghĩ rằng tôi sẽ nhận được tất cả các giá trị kiểu với một truy vấn mysql đơn giản.

Trả lời

22

Rất thường này được thực hiện trong một vòng lặp while:

$types = array(); 

while(($row = mysql_fetch_assoc($result))) { 
    $types[] = $row['type']; 
} 

Hãy nhìn vào các ví dụ trong số documentation.

Các mysql_fetch_* phương pháp này sẽ luôn luôn nhận được tiếp theo yếu tố của tập kết quả:

Trả về một mảng các chuỗi tương ứng với hàng lấy, hoặc FALSE nếu không có nhiều hàng.

Đó là lý do tại sao các vònghoạt động. Nếu không có bất kỳ hàng nào nữa, thì $row sẽ là false và vòng lặp while tồn tại.

Nó chỉ có vẻ như mysql_fetch_array được nhiều hơn một dòng, bởi vì theo mặc định nó được kết quả như normal and as associative value:

Bằng cách sử dụng MYSQL_BOTH (mặc định), bạn sẽ nhận được một mảng với cả hai chỉ số kết hợp và số .

dụ của bạn cho thấy nó tốt nhất, bạn nhận được cùng một giá trị 18 và bạn có thể truy cập nó thông qua $v[0] hoặc $v['type'].

2

Bạn cần phải lặp qua ...

$typeArray = array(); 
$query = "select * from whatever"; 
$result = mysql_query($query); 

if ($result) { 
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type']; 
} 
0
$type_array = array();  
while($row = mysql_fetch_assoc($result)) { 
    $type_array[] = $row['type']; 
} 
0
while($row = mysql_fetch_assoc($result)) { 
    echo $row['type']; 
} 
+0

Mã của anh ấy đã thực hiện việc này. Anh ta muốn nó trở thành một mảng. Echoing sẽ không giải quyết vấn đề này. – Treffynnon

0

Bạn cũng có thể làm cho cuộc sống dễ dàng hơn bằng cách sử dụng trình bao bọc, ví dụ:với ADODb:

$myarray=$db->GetCol("SELECT type FROM cars ". 
    "WHERE owner=? and selling=0", 
    array($_SESSION['username'])); 

Trình bao bọc tốt cũng sẽ giúp bạn đọc dễ dàng hơn.

2
THE CORRECT WAY ************************ THE CORRECT WAY 

while($rows[] = mysqli_fetch_assoc($result)); 
array_pop($rows); // pop the last row off, which is an empty row 
+0

CÓ! Đây là cách ĐÚNG. –

+0

Ông không sử dụng mysqli ông đang sử dụng di sản mysql – DropHit

+2

mysql cũ? Bạn phải có nghĩa là không dùng nữa Mysql. –

0

Bạn có thể muốn xem bài viết SQL Injection trên Wikipedia. Xem phần "Chuyển đổi hệ thập lục phân" để tìm một hàm nhỏ để thực hiện các lệnh SQL của bạn và trả về một mảng với thông tin trong đó.

https://en.wikipedia.org/wiki/SQL_injection

tôi viết dosql() chức năng bởi vì tôi đã mệt mỏi của việc có các lệnh SQL của tôi thực hiện ở khắp mọi nơi, quên để kiểm tra lỗi, và có thể đăng nhập tất cả các lệnh của tôi vào một tập tin log để xem sau nếu cần. Các thói quen là miễn phí cho bất cứ ai muốn sử dụng nó cho bất cứ mục đích gì. Tôi thực sự đã mở rộng chức năng này một chút bởi vì tôi muốn nó làm nhiều hơn nhưng chức năng cơ bản này là một điểm khởi đầu tốt để lấy lại kết quả từ một cuộc gọi SQL.

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