$sql="SELECT userId FROM eventmember WHERE eventid='$event_id';";`
$resultset = mysql_query($sql);
$row = mysql_fetch_array($resultset);
我从特定事件列获得了特定的用户ID,例如eventid==> eid-01(us-0, us-3,...)
,
$num_row = mysql_num_rows($resultset);
while($row) {
for($i = 0; $i<$num_row; $i++) {
$sql = "SELECT userId, firstName FROM userinfo WHERE userId='$row[$i]';";
$resultset = mysql_query($sql);
$row22 = mysql_fetch_array($resultset);
$us_id = $row22['userId'];
$us_name = $row22['firstName'];
echo "<tr>";
echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
<b> $us_id </b>
</u></td>";
echo "</tr>";
break;
}
$row = mysql_fetch_array($resultset);
}
在该代码上,我只获得了一个用户ID信息,但是针对一个事件有更多用户ID。
答案 0 :(得分:3)
首先,使用if
语句检查返回的结果集是否包含任何行,如下所示:
if($num_row){
// your code
}
其次,使用while
循环遍历结果集并显示其内容,如下所示:
while($row22 = mysql_fetch_array($resultset)){
// your code
}
最后,请不要使用mysql_
数据库扩展,它们在PHP 5.5.0中已弃用,并已在PHP 7.0.0中删除。请改用mysqli
或PDO
扩展程序。这是why you shouldn't use mysql_
functions。
所以你的代码应该是这样的:
<?php
$sql="SELECT userId FROM eventmember WHERE eventid='$event_id'";
$resultset = mysql_query($sql);
$row = mysql_fetch_array($resultset);
$num_row = mysql_num_rows($resultset);
if($num_row){
$sql = "SELECT userId, firstName FROM userinfo WHERE userId='" . $row['userId'] . "'";
$resultset = mysql_query($sql);
?>
<table>
<tr>
<td>User ID</td>
<td>First Name</td>
</tr>
<?php
while($row22 = mysql_fetch_array($resultset)){
echo "<tr><td>{$row22['userId']}</td><td>{$row22['firstName']}</td></tr>";
}
?>
</table>
<?php
}
?>
为了更好的可读性,我在表格单元格中显示了数据。
答案 1 :(得分:1)
您需要从userId
表中获取多个eventmember
,其中每个事件都有多个用户。但是你只能从$row = mysql_fetch_array($resultset);
的查询中获取一次,所以你应该只得到一个用户,你现在得到的是什么。因此,问题是,您实际上已将while
循环放在错误的位置。循环应该设置如下:
$sql="SELECT userId FROM eventmember WHERE eventid='$event_id';";
$resultset = mysql_query($sql);
$num_row = mysql_num_rows($resultset);
if($num_row) {
while($row = mysql_fetch_array($resultset)) {
$sql22 = "SELECT userId, firstName FROM userinfo WHERE userId='{$row['userId']}';";
$resultset22 = mysql_query($sql22);
$row22 = mysql_fetch_array($resultset22);
$us_id = $row22['userId'];
$us_name = $row22['firstName'];
echo "<tr>";
echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
<b> $us_id </b>
</u></td>";
echo "</tr>";
//You shouldn't use a break here. This will again give you single result only.
}
}
不使用多个查询从userinfo
表中获取数据,而是使用JOIN通过一个查询获取所有数据。像这样:
$sql="SELECT u.userId,u.firstName FROM eventmember e JOIN userinfo u ON u.userId = e.userId WHERE e.eventid='$event_id';";
$resultset = mysql_query($sql);
$num_row = mysql_num_rows($resultset);
if($num_row) {
while($row = mysql_fetch_array($resultset)) {
$us_id = $row['userId'];
$us_name = $row['firstName'];
echo "<tr>";
echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
<b> $us_id </b>
</u></td>";
echo "</tr>";
}
}
正如您应该已知的那样,在PHP 7中删除了mysql_*
函数,这些函数对您的安全性非常有害。因此,您应该转到PDO或mysqli_*功能。我在这里给出一个带有mysqli_*
函数的示例,另外我一次获取所有行而不是为每行进行读取,这对性能更好。
//First setup your connection by this way.
$link = mysqli_connect(localhost, "my_user", "my_password", "my_db");
//Now you can use mysqli
$sql="SELECT u.userId,u.firstName FROM eventmember e JOIN userinfo u ON u.userId = e.userId WHERE e.eventid=?;";
$stmt = mysqli_prepare($link, $sql);
$stmt->bind_param('s', $event_id);
$stmt->execute();
$resultset = $stmt->get_result();
$resultArray = $resultset->fetch_all();
$num_row = count($resultArray);
if($num_row) {
foreach($resultArray as $row) {
$us_id = $row['userId'];
$us_name = $row['firstName'];
echo "<tr>";
echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
<b> $us_id </b>
</u></td>";
echo "</tr>";
}
}
答案 2 :(得分:0)
mysql_fetch_array()
将从结果集中检索单个结果。因此,您需要将其包装在一个循环中以获取每一行/结果。
这是我直接从PHP文档中删除的一个例子:
while ($row = mysql_fetch_array($result)) {
printf("ID: %s Name: %s", $row["id"], $row["name"]);
}
在您的情况下,您将在while循环中包装HTML代码。
另一项改进是确保$resultset
是一种资源;如果您的查询无效,mysql_query()
可以返回false
(在INSERTS等其他成功案例中,true
可以返回>0
。您还可以使用mysql_num_rows()
来确定是否要显示mysql_*
行(并自定显示&#39;没有返回行&#39; 消息)。
也许更重要的是,PHP {5.5}中不推荐使用mysql_
函数,另外在PHP 7.0.0中删除了这些函数。而是MySQLi或PDO_MySQL。
继续编写 <td >
<a ng-href="" ng-click="GetItemDetails(product.Id,window.location.href='/Name')"><b>{{product.Name}}</b></a><br /></td>
代码,您将使自己的升级变得更加困难。同样值得注意的是,5.5还将在6个月内达到安全EOL,让您依靠您的操作系统供应商来支持安全更新。