2013-03-10 102 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>' 
}