【问题标题】:while loop in mysql_fetch_assoc not workingmysql_fetch_assoc 中的 while 循环不起作用
【发布时间】:2015-05-07 16:39:05
【问题描述】:

我整天都在为此苦苦挣扎: 我正在显示一个带有子菜单的菜单,同样的代码正在生产中工作,这让我的情况更加奇怪。我当前的开发环境使用 php 5.4。

在开发环境中,此代码会导致一个没有错误的空页面(激活了 display_errors 和 error_log 并正常工作)。如果不是去第二个,我只运行一次,一切正常(但只显示一个项目)

$query = 'SELECT * FROM permisos as p LEFT JOIN secciones_web as s ON p.id_seccion_web = s.id WHERE s.parent_id = 0 AND s.activo = 1 AND (p.seccion = "'.$_SESSION["user_section"].'" OR p.usuario="'.$_SESSION["user"].'") GROUP BY p.id_seccion_web ORDER BY s.orden ASC';
$results = mysql_query($query);

$menu = "";

while($rowp = mysql_fetch_assoc($results)){
    $menu.='<li class="submenu"><a href="#"><i class="icon '.$rowp["icon"].'"></i> <span>'.$rowp["nombre"].'</span></a><ul>';
    $q = 'SELECT * FROM permisos as p LEFT JOIN secciones_web as s ON p.id_seccion_web=s.id WHERE s.parent_id='.$rowp["id"].' AND s.activo=1 AND (p.seccion = "'.$_SESSION["user_section"].'" OR p.usuario="'.$_SESSION["user"].'") GROUP BY p.id_seccion_web ORDER BY s.orden ASC';
    $resultado = mysql_query($q,$db_conn);

    while($rowsubmennu = mysql_fetch_assoc($resultado)){
        if($_SESSION["user_section"] == "Almacén" && $rowsubmennu["url"] == "pedido-almacen.php"){
            $menu.='<li><a href="'.$rowsubmennu["url"].'" class="navi">'.$rowsubmennu["nombre"].'<span class="label label-pedidos">0</span></a></li>';
        }else{
            $menu.='<li><a href="'.$rowsubmennu["url"].'" class="navi">'.$rowsubmennu["nombre"].'</a></li>';
        }
    }
    $menu.= "</ul></li>";
}

关于为什么第二次崩溃我的应用程序没有错误的任何线索?

更新:完整页面在这里:http://pastebin.com/FPrQgsbE

【问题讨论】:

  • 几乎 100% 是$db_conn,删除它
  • @Hanky웃Panky 为什么?这是一个可选参数,明确提供它没有任何害处。
  • 是的,但其中可能存在拼写错误,他们的第一个查询有效,因为他们不提供。如果显式提供的值是无效资源,它将失败
  • 你为什么要做两个单独的查询而不是将它们与LEFT JOIN结合起来?
  • or die(mysql_error()) 添加到mysql_query 两行的末尾,查看是否出现SQL 错误。

标签: php mysql


【解决方案1】:

先检查错误:

$resultado = mysql_query($q,$db_conn);
if (!$resultado) {
    die('Invalid query: ' . mysql_error());
}
    while($rowsubmennu = mysql_fetch_assoc($resultado)){

并且$db_conn 未在已发布的代码片段中设置。它是在哪里初始化的?

【讨论】:

  • 不,一样。我必须清楚,错误不仅仅是mysql,加载页面的任何部分都失败并且没有返回错误。相同的代码正在另一台机器上运行。如果我删除第二个 while($rowsubmennu = mysql_fetch_assoc($resultado)){ ... } 并且只这样做: $rowsubmennu = mysql_fetch_assoc($resultado) 它可以工作(当然只显示一行)
  • 作为一个菜单,代码就差不多了。该文件几乎在应用程序的任何页面中都是必需的,只需要显示一些 html 代码。但是好的,我会分享它(上面更新)
  • 你有这个网页链接在线吗?
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2015-03-09
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多