簡體   English   中英

從mysql查詢php創建數組

[英]create array from mysql query 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查詢獲得所有類型值。

通常這是在while循環中完成的:

$types = array();

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

看一下文檔中的示例。

mysql_fetch_*方法將始終獲取結果集的下一個元素:

返回與獲取的行對應的字符串數組,如果沒有更多行,則返回FALSE。

這就是while循環工作的原因。 如果沒有任何行, $row將為false並且while循環存在。

似乎mysql_fetch_array只有多行,因為默認情況下它會獲得正常的結果關聯值

通過使用MYSQL_BOTH(默認),您將獲得一個包含關聯索引和數字索引的數組。

您的示例最佳顯示,您獲得相同的值18 ,您可以通過$v[0]$v['type']訪問它。

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

你需要迭代......

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

if ($result) {
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type'];
}

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

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

我編寫了dosql()函數,因為我厭倦了讓我的SQL命令在所有地方執行,忘記檢查錯誤,並能夠將我的所有命令記錄到日志文件中以供以后查看(如果需要)。 對於任何想要將其用於任何目的的人而言,該例程是免費的。 我實際上已經擴展了這個功能,因為我希望它能做得更多但是這個基本功能是從SQL調用中獲取輸出的一個很好的起點。

$type_array = array();    
while($row = mysql_fetch_assoc($result)) {
    $type_array[] = $row['type'];
}
while($row = mysql_fetch_assoc($result)) {
  echo $row['type'];
}

您還可以使用包裝器使生活更輕松,例如使用ADODb:

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

一個好的包裝器也會為你做所有的逃避,讓事情更容易閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM