2016-01-14 106 views
1

我的头两个while循环正在工作,但是当我加3一个用于以下水平,我得到另一个错误:while循环 - 数据库查询失败:

数据库查询失败:你有一个错误的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 [ “身份证”]为空或空字符串 - “”,那么你应该检查这是为什么。

+0

我已经添加了上面的代码,我得到了这个字符串(50)“SELECT * FROM subchildpages1 WHERE childpage_id =”NULL这是我的表格构造1,id,int(11),No,None,AU TO_INCREMENT: 2,childpage_id,int(11),否,无: 3,menu_name,varchar(70),latin1_swedish_ci,否,无: 4,position,int(3),否,无: 5,可见,tinyint,(1),不,无: 6,内容,文本,latin1_swedish_ci,不,无:我的表格内容不是NULL .1 Review&Index,1,1,0: 2,1,4.1.2指导方针与标准,2,1,0: – Hanna

+0

表格不是空的,我不确定为什么php会收到空值 - 我甚至放弃了这两个表,并重新创建它们,没有改变,我通过命令提示符登录到MySQL,并选择*从.....我的表和MySQL都retured一个值,但PHP仍然不会拿起我的价值,请帮助 – Hanna

+0

对不起,我不明白d明显地,parentpages是我的主菜单,它的ID为每个“页面”,childpages是我的下一级(2)在我的菜单中,parentpage_id将其链接到父页面,subchildpages1是我的3de级菜单childpage_id将它链接到2级菜单。看起来我的变量subchildpages1(subchildpages2,subchildpages3)没有设置,或者从mysql中获得一个空值,通过cmd将它放到我的sql中,并且在那里拉出的表都具有预期的值。所有桌子都解锁了,还有更好的方式让我做我的导航女巫可以rawurlencode以及? – Hanna