2010-09-07 57 views
0

在PHP中,我很難從一個SQL查詢結果中提取行數據。我需要的服務信息存儲在一個名爲$ SelectedItems的數組中。下面的代碼按照它應該的方式工作,但打印包含所有行的整個表格。我將如何獲得它只是打印1行。PHP打印只爲SQL查詢結果選擇行

$sql ="select blah blah" 
    //Output result 
    $result = mysql_query($sql); 


    //Generate Information about Service or Product 
    while($row = mysql_fetch_array($result)) 
     { 
     if (in_array($row['Service_Name'], $SelectedItems)){ 
      print $row['Service_Description']; 
      print $row['Service_Cost']; 
     } 
     }; 

我非常新的PHP和可能要對這個錯誤的方式請讓我知道,如果我是在返回前笑。

的$ SelectedItems是從$ _ POST處理的數據以及所需的數據被設置到一個數組

//Finds Out which services have been selected 
foreach (array_keys($_POST) as $key) { 
$$key = $_POST[$key]; 
    if ($$key == "1"){ 
     print "$key is ${$key}<br />"; 
     $SelectedItems[] = $key; 
    }; 
}; 

回答

1

我看到在這個代碼中沒有故障的一瞥(但我沒有在PHP解釋我頭,因此我無法確定)。

無論如何,你必須開始用實際數據調試你的代碼。
爲什麼不輸出$row['Service_Name']$SelectedItems?通過使用var_dump()函數更好。 它可以是類型轉換問題或丟失數據或任何東西。用自己的眼睛觀察實際數據始終有幫助

只需在第二個循環中注意。這很奇怪而且很危險。
而應該只是

foreach ($_POST as $key => $value) { 
    if ($value == "1"){ 
     print "$key is $value<br />"; 
     $SelectedItems[] = $key; 
    } 
} 
2

更好地作出選擇在您的SQL查詢比PHP:

$sql ="select blah blah 
     from <table> 
     where " Service_Name IN ('".implode("','",$SelectedItems)."'); 

OR

$sql ="select blah blah 
     from <table> 
     where " Service_Name = '".$SelectedItems[0]."'); 

這樣一來,你讓數據庫做它最擅長的事情,減少數據庫和PHP之間傳輸的數據量,並減少PHP代碼。

+0

不錯,雖然我用mysql_real_escape字符串拋出array_map字符串 – 2010-09-07 13:02:42

+0

我從OP的編輯中看到$ SelectedItems的值肯定來自用戶輸入;所以是的,他們也應該逃脫 – 2010-09-07 13:11:52

+0

LOL這是史詩般的失敗。逃避與用戶輸入無關。但只能用引號括住值。 – 2010-09-07 13:13:40