2013-03-10 103 views
1

讓我首先開始說我的SQL是正確的,並且不止一次地檢查它SQL將不會返回值

我有兩種方法在我的文件中調用SQL不止一次,但是當涉及到第二部分時,它不會返回任何值來填充字段。

這是給我的問題的一部分:

$query = mysql_query("SELECT * FROM MegaFilter WHERE Parent = '".$ThisPage."' "); 
while($query2 = mysql_fetch_assoc($query)) { 
    $SubID = $query2['Filter']; 
    $query3 = mysql_query("SELECT * FROM SubCategories WHERE ID = '".$SubID."' "); 
    while($query4 = mysql_fetch_assoc($query3)) { 
     $SubCatID = $query4['ID']; 
     $query5 = mysql_query("SELECT * FROM Web_Pages WHERE SubCat = '".$SubCatID."' "); 
    } 
    while($query6 = mysql_fetch_assoc($query5)) { 
     $ProductName = $query6['Title']; 
     $ProductID = $query6['ID']; 
    } 
    echo '<li class="item" data-id="id-'.$Productid.'" data-type="'.$SubID.'">'.$Productname.'</li>'; 
} 

它不記錄任何錯誤,只是最後的2個變量沒有定義。

+1

**你離開自己敞開SQL注入**請了解如何使用參數化查詢,最好使用PDO模塊來保護您的Web應用程序。 http://bobby-tables.com/php有例子讓你開始。 – 2013-03-10 05:50:48

+0

你應該看看使用SQL連接。您正在對數據庫進行太多的調用。如果你在MegaFilter中有5行,在SubCategories中有7行,每個都有10行,Web_pages中有10行,你將會對你的數據庫進行350次SELECT調用。使用SQL JOIN可以讓您在一次調用數據庫的過程中獲得所有數據。謝謝! – 2013-03-10 06:54:54

回答

1

Variable names在php中區分大小寫。您正在將值分配給$ProductName$ProductID,但您使用$Productid(小寫字母i)和$Productname(小寫字母n)。

+0

,這樣的好消息很容易出錯! – LUX 2013-03-10 05:44:45

0
  1. 不應再使用mysql_庫 - 它們已被棄用。
  2. 你的牙套到處都是(如果我明白你想達到的目的見下文)。
  3. PHP變量區分大小寫。

我認爲你需要的代碼是(只需要一個select語句):

$connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 
$stmt = $connection -> mysqli_prepare('SELECT m.Filter AS SubID, w.Title AS ProductName, w.ID AS ProductID FROM MegaFilter AS m, INNER JOIN SubCategories AS sc ON (sc.ID = m.Filter) INNER JOIN Web_Pages AS w ON (w.SubCat = sc.ID) WHERE Parent = ?'); 
$stmt->bind_param('s', $ThisPage); 
$stmt->bind_result($SubID, $ProductName, $ProductID); 
$stmt->execute(); 
while ($stmt->fetch()) 
{ 
    echo '<li class="item" data-id="id-'.$ProductID.'" data-type="'.$SubID.'">'.$ProductName.'</li>' 
}