为什么只从我的数据库中提取1个表中的记录

odopli94  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(314)

我是编程新手。因为我还是个学生,所以过了几个小时我似乎都没法修好,这是我的论文。
我正试着从两张table上取记录 prisoner table visitations 表-这个表有囚犯id外键,所以如果我点击一个囚犯,它也会显示他的探视记录。
这是我的密码:

<?php

include "connect.php";

$id = $_GET['id'];

$result = $connect->query(
    "SELECT * FROM prisoner                                                                
       INNER JOIN visitations ON prisoner.prisoner_id = visitations.prisoner_id
       WHERE prisoner.prisoner_id = $id"
) or die($connect->error);

$visit = $connect->query(
     "SELECT visitor,date_of_visit,time_of_visit,affinity,homeAddress FROM visitations 
        INNER JOIN prisoner ON prisoner.prisoner_id = visitations.prisoner_id 
        WHERE visitations.prisoner_id = $id"
) or die($connect->error);

囚犯桌

while($row = $result->fetch_assoc()){

    $id = $row['prisoner_id'];
    $photo = $row['photo'];
    $gname = $row['givenName'];
    $mname = $row['middleName'];
    $lname = $row['lastName'];
    $aname = $row['nickname'];

<div class="row text-center">
                <?php echo "<img style = 'width: 16%;height: 16%;margin-top:30px;'src='images/".$photo."' >";  
                        echo "<br><br>$gname $mname $lname";
                ?>
           </div>

            <?php

            echo "<div class='col-lg-3'>Nickname: $aname </div>";
}

探视

<h4>Visitations</h4>
            </div>

            <table border = 1>
            <tr>
                <th>Visitor Name</th>
                <th>Date of Visit</th>
                <th>Time of Visit</th>
                <th>Affinity</th>
                <th>Home Address</th>
            <tr>

            <?php

            while($row2 = $visit->fetch_assoc()){

                $v_visitor = $row2['visitor'];
                $v_date = $row2['date_of_visit'];
                $v_time = $row2['time_of_visit'];
                $v_affinity = $row2['affinity'];
                $v_address = $row2['homeAddress'];

            echo "
             <tr>
                <td>$v_visitor</td>
                <td>$v_date</td>
                <td>$v_time</td>
                <td>$v_affinity</td>
                <td>$v_address</td>
             </tr>

             </table>";

             }

它只从visitations表中获取记录,而且我不知道为什么其他记录不在html表中。
这是它显示的内容:

有人能指出我代码的问题吗

wxclj1h5

wxclj1h51#

在这个上下文中,每个连接只能使用一个活动语句,因此在转到新查询之前,您需要使用fetch\u all来使用第一个查询的整个结果集。

$result1 = $connect->query(...)
$rows1 = $result1->fetch_all(MYSQLI_ASSOC);

$result2 = $connect->query(...)
$rows2 = $result2->fetch_all(MYSQLI_ASSOC);

foreach ($rows1 as $row) ...

foreach ($rows2 as $row) ...

也可以使用multi-u query在单个批处理中执行多个查询。

b4qexyjb

b4qexyjb2#

除了提到的sql注入问题(归结为:如何正确编码sql查询)之外,还有更多可能出错的问题,另一个问题是html注入问题(归结为:如何正确编码html)。
所以简而言之:一个html表只能关闭一次,并且总是第一次匹配关闭 </table> 标签。在ops代码中,每行有一个结束表标记的输出(在 while body),在第一行之后,关闭表,并按照html规则呈现更多的数据,这些规则涉及如何呈现超出范围的标记中的文本数据(即此处表下的文本)。
因此,不仅要做好有关sql注入的sql作业,而且首先要熟悉如何改进php模板文件的编写。例如,你可以从 <?= $variable ?> 表示法,由于这是html而不是纯文本,所以越正确 <?= htmlspecialchars($variable) ?> 变体。

相关问题