Php 在while循环中运行mysql

Php 在while循环中运行mysql,php,mysql,while-loop,Php,Mysql,While Loop,我有一个mysql调用的while循环,但我也尝试在while循环中运行另一个mysql查询,但它只运行一次。我想不出来 这是我的密码: $sql = "SELECT * FROM widget_layout WHERE module_id=".mysql_real_escape_string($id)." AND state='".mysql_real_escape_string($page)."' AND position=".mysql_real_escape_string($positi

我有一个mysql调用的while循环,但我也尝试在while循环中运行另一个mysql查询,但它只运行一次。我想不出来

这是我的密码:

$sql = "SELECT * FROM widget_layout WHERE module_id=".mysql_real_escape_string($id)." AND state='".mysql_real_escape_string($page)."' AND position=".mysql_real_escape_string($position);

$query = mysql_query($sql);
while ($row = mysql_fetch_assoc($query)) {
    $layout .= $row['widget_id'].'<br/>'; //test if it is looping through all rows
    $sql2 = "SELECT title FROM widgets WHERE id=".$row['widget_id'];
    $query2 = mysql_query($sql2);
    $result2 = mysql_fetch_array($query2);
    $layout .= $result2[0]; // test the title output
}

它在第一个查询中循环没有问题,但是第二个查询只是加载第一个小部件的标题,其余的返回null。知道为什么要这样做吗?

您不必使用WHILE循环-这可以在一条SQL语句中完成:

SELECT wl.widget_id,
       w.title
  FROM WIDGET_LAYOUT wl
  JOIN WIDGETS w ON w.id = wl.widget_id
 WHERE wl.module_id = mysql_real_escape_string($id)
   AND wl.state = mysql_real_escape_string($page) 
   AND wl.position = mysql_real_escape_string($position);

标题值为NULL的问题取决于WIDGET.title列是否可为NULL,或者WIDGETS表中没有id值的记录。您需要检查从第一次查询返回的值,首先确认它们在WIDGETS表中有支持记录,然后直接从文档中查看标题值…

:不支持多个查询。您的内部查询正在终止外部查询。

您错了。发布的代码按顺序包含查询。不是倍数!你错了$query2位于while循环中,该循环使用外部$query的结果。只要另一个$query正在使用,您就不能使用标准的mysql\u查询发出另一个查询,而不终止前一个查询。它们可能是两个独立的查询语句,但mysql_*函数不支持在同一个连接句柄上同时进行多个活动查询。您测试过吗?我已经测试过了,一切正常。所以你错过了一些东西。我有很多项目使用这种方法。提问者并不是在做多重询问。每次呼叫一个查询!看看这里,看看区别:一旦执行了mysql\u查询,结果存储在一个特定的资源完整的结果集上,然后循环使用这个资源,并对每个项目执行另一个mysql\u查询,结果是不同的资源。没有外部查询与内部查询一起工作!在循环if中添加if语句$query2{echo mysql_error;exit;}检查第二个查询是否有任何停止循环的错误。