Foreach加入的问题

时间:2014-01-21 03:12:25

标签: php mysql sql join foreach

我刚接触使用PHP foreach,所以这可能是显而易见的,因为这个脚本无法正常工作。我正在尝试向登录用户显示队友名单。

此处的目标是我尝试将用户名列表添加到<li>标记中,此文件将包含在<ul>中。我的想法是查看TeamPlayer表并获取与登录用户当前会话变量UserIDs匹配的所有TeamID,然后使用{JOIN {1}}表获取匹配的所有UserInfo的{​​{1}}记录。将结果放入一个数组中,然后生成这些项的列表以显示给用户。

似乎无法找到我出错的地方。

FullName

4 个答案:

答案 0 :(得分:1)

你可以试试这个。

$query_team  = "SELECT UserInfoTable.*, TeamPlayerTable.*
                FROM Team AS TeamPlayerTable 
                JOIN UserInfo AS UserInfoTable 
                ON TeamPlayerTable.UserID = UserInfoTable.UserID 
                WHERE TeamPlayerTable.TeamID = '$teamID'";

答案 1 :(得分:0)

您正在使用FROM两次,更改:

...
FROM Team AS TeamPlayerTable 
FROM UserInfo AS UserInfoTable 
...

...
FROM Team AS TeamPlayerTable 
JOIN UserInfo AS UserInfoTable 
...

答案 2 :(得分:0)

首先,使用实际的JOIN并为您的$teamID值准备一个包含占位符的语句...

$stmt = $dbhandle->prepare('
    SELECT UserInfo.FullName
    FROM UserInfo
    INNER JOIN TeamPlayer
    ON UserInfo.UserID = TeamPlayer.UserID
    WHERE TeamPlayer.TeamID = ?
'); // THIS IS LITERAL CODE, QUESTION MARK AND ALL

// Check for errors
if (!$stmt) {
    throw new Exception($dbhandle->error, $dbhandle->errno);
}

这可以避免任何SQL注入漏洞。

然后绑定值(假设它是一个整数),执行语句并绑定结果...

$stmt->bind_param('i', $teamID);
if (!$stmt->execute()) {
    throw new Exception($stmt->error, $stmt->errno);
}
$stmt->bind_result($fullName);

你没有拥有来使用结果绑定,但我发现这是最好的方法。

现在循环结果......

?>
<ul>
    <?php while ($stmt->fetch()) : ?>
    <li><?= htmlspecialchars($fullName) ?><?li>
    <?php endwhile ?>
</ul>
<?php
$stmt->close();

进一步阅读 - http://php.net/manual/mysqli.quickstart.prepared-statements.php

答案 3 :(得分:-1)

与Sudhir的回答一起,您可能想要调整foreach()循环。我建议:

foreach($array as $key => $value) {
    echo "<li>".$value."</li>";
}