插入sql注入的prepare语句后,网站上没有数据输出

yqlxgs2m  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(372)

这是以前的代码,它起作用了

<?php
    include ("connect.php"); // $conn

    $sql = "SELECT name, date, adress, number FROM event ORDER BY date ASC LIMIT 4";    

    foreach ($conn->query($sql) as $row){

        $date = date('j.n.Y');
        $actDate = strtotime($date);
        //echo $date;                               Ausgabe aktuelles Datum im deutschen Format
        //echo $actDate;                            Ausgabe des Datums als Zahl

        $dbDate = $row['date'];
        $eventDate = strtotime($dbDate);
        //echo $dbDate;                             Ausgabe des Datums der Veranstaltung
        //echo $eventDate;                          Veranstaltungsdatum als Zahl

        if ($actDate <= $eventDate) {                                                    
            // hide entrys with lower date 

            $originalDate = $row['date'];                                               
            $formatDate = date('d.m.Y', strtotime($originalDate));                                               
            // hide entrys with lower date 

            echo "  

            <tr>
                <td>".$row['name']."</td>
                <td>$formatDate</td>
                <td class='w3-hide-small'>".$row['adress']."  ".$row['number']."</td>               
            </tr>

            ";
        }
    }
?>

现在我添加了一个针对sql注入的prepared语句,现在新代码没有错误输出,但是db也没有数据输出,我不知道在哪里可以找到错误。你可以忽略日期格式,我没有改变那里的任何东西,它只是准备编辑它不工作,我想。

<?php
    include ("connect.php"); // $conn

    $sql = $conn->prepare("SELECT name, date, clock, adress, number, link, info FROM event WHERE (name, date, clock, adress, number, link, info) = (?, ?, ?, ?, ?, ?, ?) ORDER BY date ASC");   
    $sql->bind_param("sississ", $name, $date, $clock, $adress, $number, $link, $info);

    $sql->execute();

    $result = $sql->get_result();
    while ($row = $result->fetch_assoc()) {

        foreach ($conn->query($sql) as $row){

            $date = date('d.m.Y');
            $actDate = strtotime($date);
            //echo $date;                               Ausgabe aktuelles Datum im deutschen Format
            //echo $actDate;                            Ausgabe des Datums als Zahl

            $dbDate     = $row['date'];
            $eventDate  = strtotime($dbDate);
            //echo $dbDate;                             Ausgabe des Datums der Veranstaltung
            //echo $eventDate;                          Veranstaltungsdatum als Zahl

            if ($actDate <= $eventDate) {               // Einträge mit abgelaufenem Datum verbergen 

            $originalDate = $row['date'];                                               
            $formatDate = date('d.m.Y', strtotime($originalDate));

            echo "  

                <div class='accordionEvent nav_bottom w3-container w3-center'><h4>".$row['name']." am $formatDate ab ".$row['clock']."</h4></div>
                <div class='panel head'>
                    <p>Adresse: ".$row['adress']." ".$row['number']."</p>

                    <p>Link: <a href=".$row['link']." target='_blank'>".$row['link']."</a></p> 

                    <p>".$row['info']."</p>
                </div>
                <br>

                ";
            }
        }       
    }   
    $sql->close();  
    $conn->close();
?>
li9yvcax

li9yvcax1#

您仍然有一行原始代码,它打破了循环:

$result = $sql->get_result();
 while ($row = $result->fetch_assoc()) {
     foreach ($conn->query($sql) as $row){ // <--- 
     // ...
i5desfxk

i5desfxk2#

确保使用相同的语句。如果没有参数,可以跳过绑定部分。

<?
$sql = $conn->prepare("SELECT name, date, adress, number FROM event ORDER BY date ASC LIMIT 4");

$sql->execute();

然后拆下管路16

foreach ($conn->query($sql) as $row){

和51号线

}

当前您正在反复执行查询并覆盖 $row 很可能你没有得到一个错误,因为 $sql 是准备好的语句而不是字符串。
删除上面提到的行就可以了。

相关问题