2013-03-10 2 views
1

Позвольте мне сначала сказать мой SQL правильный и проверил его более одного раза.SQL не вернет значения

У меня есть 2 метода в моем файле, вызывающих более одного раза для 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, для защиты вашего веб-приложения. На http://bobby-tables.com/php есть примеры, чтобы вы начали. –

+0

Вы должны изучить использование SQL-соединений. Вы делаете слишком много звонков в базу данных. Если у вас есть 5 строк в MegaFilter и 7 строк в SubCategories для каждого из них, а затем 10 строк в Web_pages для каждого из них, вы будете делать 350 звонков SELECT в свою базу данных. Использование SQL JOINs позволит вам получить все данные в одном вызове в базу данных. –

ответ

1

Variable names чувствительны к регистру в php. Вы назначаете значения $ProductName и $ProductID, но используете $Productid (нижний регистр i) и $Productname (нижний регистр n).

+0

спасибо !, такой noobish, но легко ошибиться! – LUX

0
  1. Не следует использовать библиотеки mysql_ больше - они устарели.
  2. Ваши брекеты повсюду (если я понимаю, чего вы пытаетесь достичь, см. Ниже).
  3. PHP-переменные чувствительны к регистру.

Я думаю, что код, который вы требуете (просто нужно один оператор выбора):.

$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>' 
} 
Смежные вопросы