2016-01-14 2 views
1

Мои первые два в то время как цикл работает сейчас, но когда я добавить 3 один на следующий уровень я получаю другую ошибку:время цикла - запрос базы данных не удалось:

База данных запросов не удалось: У вас ошибка в вашей Синтаксис SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с '' в строке 1

Уровень 1 - Работает

$parentpage_set = mysql_query("SELECT * FROM parentpages", $connection); 
    if (!$parentpage_set) {die("Database query failed: " . mysql_error()); } 
    echo "<ul class=\"subjects\">"; 
    while ($parentpage = mysql_fetch_array($parentpage_set)) {echo "<li>{$parentpage["menu_name"]}</li>"; 
    echo "</ul>"; 

Уровень 2 - работает

$childpage_set = mysql_query("SELECT * FROM childpages WHERE parentpage_id = {$parentpage["id"]}",$connection); 
    if (!$childpage_set) {die("Database query failed: " . mysql_error()); } 
    echo "<ul class=\"pages\">"; 
    while ($childpage = mysql_fetch_array($childpage_set)) {echo "<li>{$childpage["menu_name"]}</li>"; } 
    echo "</ul>"; 

Уровень 3 - не работает, если я прокомментирую это, мой запрос выполняется, но при отсутствии комментариев я получаю сообщение об ошибке

$subchildpage1_set = mysql_query("SELECT * FROM subchildpages1 WHERE childpage_id = {$childpage["id"]}",$connection); 
    if (!$subchildpage1_set) {die("Database query failed: " . mysql_error()); } 
    echo "<ul class=\pages\">"; 
    while ($subchildpage1 = mysql_fetch_array($subchildpage1_set)) {echo "<li>{$subchildpage1["menu_name"]}</li>"; } 
    echo "</ul>"; 

Мне еще нужно добавить еще два уровня в мою навигацию - я не могу забрать свою ошибку, и я пытался ее забрать, и я прочитал много вопросов, может кто-нибудь скажет мне, где моя ошибка пожалуйста,

+1

Пожалуйста, прекратите использование 'mysql_ *' функций (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

+1

Если вы повторите запрос, что вы видите? Это первое, что вам нужно сделать при поиске синтаксических ошибок в запросах. –

+0

Сделайте себе огромную услугу и сделайте некоторое основное разделение проблем. По крайней мере, выполните запросы к базе данных в верхней части страницы, сохраните результаты в требуемой структуре (некоторая форма массива), а затем выполните итерацию массива внутри html.Смешивание сложного php с html - это всегда плохая идея - просто попытка прочитать приведенный выше код дает мне головную боль - неудивительно, что вы боретесь – Steve

ответ

0

Что нужно здесь для отладки.

Отладка на PHP может быть довольно легкой для таких проблем.

У вас есть синтаксическая ошибка в вашем запросе. Глядя на запрос, я мог догадаться, что есть два варианта ошибок. Во-первых, неверно написано ключевые слова в запросе. Во-вторых, $ childpage ["id"] имеет пустое значение. В таком случае приведет запрос сборки в:

"SELECT * FROM subchildpages1 WHERE childpage_id =" 

вместо

"SELECT * FROM subchildpages1 WHERE childpage_id = 1" 

, например.

Так что здесь вы можете назначить запрос в переменной и распечатать его. И учитывая предположения о двух возможностях ошибки, также напечатайте переменную $ childpage ["id"].

При отладке переменных всегда используются переменные var_dump() или print_r().

Пример:

$sql = "SELECT * FROM subchildpages1 WHERE childpage_id = {$childpage["id"]}"; 

var_dump($sql, $childpage["id"]); 
die(); 

$subchildpage1_set = mysql_query($sql, $connection); 

Если $ childpage [ "ID"] является NULL или пустая строка - "", то вы должны проверить, почему это.

+0

Я добавил код выше, и я получил эта строка (50) «SELECT * FROM subchildpages1 WHERE childpage_id =« NULL это моя конструкция таблицы 1, id, int (11), No, None, AU TO_INCREMENT: 2, childpage_id, int (11), No, None: 3, menu_name, varchar (70), latin1_swedish_ci, No, None: 4, position, int (3), No, None: 5, visible , tinyint, (1), No, None: 6, content, text, latin1_swedish_ci, No, None: и мое содержимое таблицы не является NULL Ether, id, childpage_id, menu_name, position, visible, content: 1, 1, 4.1 .1 Обзор и индекс, 1, 1, 0: 2, 1, 4.1.2 Руководства и стандарты, 2, 1, 0: – Hanna

+0

таблица не пуста, и я не уверен, почему php получает значение Null - я даже удаляю обе таблицы и воссоздал их, без изменений, у меня есть логин для mysql через командную строку и Select * from ..... обе мои таблицы и mysql сохранили значение, но php все равно не возьмет мою ценность, пожалуйста, помогите – Hanna

+0

Извините, я не подставил d clear, parentpages - это мое главное меню с его идентификатором на каждую «страницу», дочерние страницы - это мой следующий уровень (2) в моем меню, а parentpage_id связывает его с родительской страницей, subchildpages1 - это мое меню уровня 3de childpage_id, которое связывает его с уровнем 2 меню. кажется, что мои переменные subchildpages1 (subchildpages2, subchildpages3) не устанавливают или не получают значение Null от mysql, запустили его в мой sql через cmd и вытащили таблицы там, все из которых имеют заданное значение. все столы разблокированы, есть ли лучший способ для меня сделать мою навигацию, также как rawurlencode? – Hanna

Смежные вопросы