[英]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.