2010-08-05 179 views
5

我有一個小問題,我不明白。我有一個擁有所有者和類型的數據庫(以及更多課程)。我想所有的類型值的列表具有所有者等於當前用戶,但我得到的只有兩個結果從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)); 

打印出:

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

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

打印出來:

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

結果應該是一個數組中的19,19,18,17,16。那就是我擁有所有者的所有類型。

我有這個工作現在:

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

在這裏,我打印出所有的值正確,但我需要創建的所有值的數組。我雖然可以使用array_push,但是最好有更好的方法。我以爲我會用一個簡單的mysql查詢來獲取所有的類型值。

回答

22

很多時候,這是在while循環中完成:

$types = array(); 

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

已經在看例子documentation

mysql_fetch_*方法總是會得到結果集的下一個元素:

,如果沒有更多的行返回字符串數組對應於提取行,或FALSE。

這就是爲什麼while循環工作。如果沒有任何行$row將爲false並且存在while循環。

它只是似乎mysql_fetch_array得到多行,因爲默認情況下它得到的結果作爲normal and as associative value

通過使用MYSQL_BOTH(默認),你會得到與兩個關聯和數字索引的數組。

你的例子很好地說明它,你就會得到相同的值18並且你可以通過$v[0]$v['type']訪問它。

2

你確實需要遍歷...

$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

他的代碼已經這樣做了。他希望它成爲一個陣列。回聲不會解決這個問題。 – Treffynnon 2010-08-05 13:55:44

0

您還可以使用包裝材料使生活更輕鬆。與ADODb:

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

一個很好的包裝將爲你做所有的逃跑,使事情更容易閱讀。

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

是的!這是正確的方法。 – 2013-07-23 01:13:56

+0

他是不是使用mysqli他使用的是傳統的mysql – DropHit 2014-06-21 18:40:32

+2

傳統的mysql?您必須表示已棄用的Mysql。 – 2014-06-23 00:45:28

0

你可能想看看維基百科上的SQL注入文章。查看「十六進制轉換」部分,找到一個小函數來執行SQL命令並返回一個包含其中信息的數組。

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

我寫的dosql()函數,因爲我厭倦了我所有的地方執行SQL命令的,忘記檢查錯誤,並能夠對所有我的命令登錄到一個日誌文件如果需要的話可以稍後查看。對於任何想要將其用於任何目的的人來說,該例程都是免費的。實際上我已經擴展了這個函數,因爲我想讓它做更多的事情,但是這個基本函數是從SQL調用中獲取輸出的一個很好的起點。