2012-09-04 34 views
0

我只有3列的MySQL表。由sub_id號排序象下面這樣列中的數據:如何將MySQL錶行分配給不同的變量?

sub_id | field_name | field_val 
1 ------- carname -------ford 
1 ------- driver ------- michael 
1 ------- licence -------123 
2 ------- carname -------bmw 
2 ------- driver ------- robert 
2 ------- licence -------321 

對於表時我有下面的代碼:

$link = mysql_connect("xxx", "xxx", "xxx"); 
    mysql_select_db("xxx"); 
    mysql_query ('SET NAMES utf8'); 
    mysql_query ('SET CHARACTER SET utf8'); 
    $query = "select sub_id,field_name,field_val from wp_cformsdata WHERE sub_id IN ($ID)"; 
    $result = mysql_query($query); 

它給了我設定的期望ID行。我知道有這樣一張亂七八糟的桌子很不舒服,但它是由插件自動創建的。 問題是我如何分配每一行,我得到不同的變量?我想用這個變量來填充html文檔。對不起,因爲英文:)

+1

請花時間學習MySQL的新mysqli或PDO接口。即使在插入了'$ ID'但沒有任何明顯轉義的簡短示例中,您正在使用'mysql_query'並將自己暴露給潛在的嚴重[SQL注入漏洞](http://bobby-tables.com/php)。 – tadman

+0

@tadman $ ID可能不是用戶輸入。 –

+0

如果它沒有明顯逃脫,你不能認爲它是逃脫。這就是爲什麼佔位符是最好的辦法。沒有明顯的錯誤,你不能把它搞砸。 – tadman

回答

0

你只需要遍歷所有結果,手動比較字段名稱和sub_id到你期望的東西,然後將結果賦值給一個條件變量。

就個人而言,我會遍歷是創造sub_id =>字段的數組,所以像

while($row = mysql_row($result)) 
    $users[$row['sub_id']][$row['field_name']] = $row['field_value'] 

,因爲我不記得mysql_*確切語法的語法是錯誤的,但你明白了。 「

+0

請你能給出正確的語法。這似乎是我需要的,但我總是新手。 – mttrnv

+0

只需進入概念並在PHP手冊中查找正確的調用即可。 – slugonamission

0

」應該使用MySQLi或PDO_MySQL擴展名。「從文檔來看,您正在使用的這些方法已被棄用。

這裏是你如何得到每個項目,你必須循環,因爲它的結果,設置。

while ($row = mysql_fetch_assoc($result)) { 
    $car_name = $row['carname']; 
    $driver = $row['driver']; 
} 

等等..

+0

它給我一個錯誤「未定義索引」 – mttrnv

+0

索引或列名如下所示$ row ['this_is_the_database_field_name']; – wesside

0

你並不需要不同的變量。我建議在你的PHP代碼中使用switch

$link = mysql_connect("xxx", "xxx", "xxx"); 
mysql_select_db("xxx"); 
mysql_query ('SET NAMES utf8'); 
mysql_query ('SET CHARACTER SET utf8'); 
$query = "select sub_id,field_name,field_val from wp_cformsdata WHERE sub_id IN ($ID)"; 
$result = mysql_query($query); 
while($row = mysql_fetch_assoc($result)) 
{ 
    switch($row['field_name']) 
    { 
     case 'carname': 
      // do something 
      break; 
     case 'driver': 
      // do something else 
      break; 
     // add more "case" here 
     default: 
      // do the default action here 
    } 
} 

此外,閱讀this page幫助您選擇使用,而不是過時的mysql_*功能是什麼。

+1

請注意OP:'mysql_'函數已被棄用。 – Kermit

+0

@njk:在您發表評論時完成。 – Jocelyn

0

據我可以認爲你需要一個簡單的循環來讀取文檔的行。

<?php 
$link = mysql_connect("xxx", "xxx", "xxx"); 
mysql_select_db("xxx"); 
mysql_query ('SET NAMES utf8'); 
mysql_query ('SET CHARACTER SET utf8'); 
$query = "select sub_id,field_name,field_val from wp_cformsdata WHERE sub_id IN ($ID)"; 
$result = mysql_query($query); 
while($rows=mysql_fetch_array($result)){ 
?> 
<div> <?php echo $rows['sub_id'];?> </div> 
<div> <?php echo $rows['field_name'];?> </div> 
<div> <?php echo $rows['field_val'];?> </div> 
<? 
} 
mysql_close(); 
?> 

我希望這會有所幫助。你也可以使用mysql_fetch_assoc()。

+0

謝謝,但不是,那不是我所需要的。 – mttrnv