php - 插入用于sql注入的prepare语句后网站上没有数据输出
问题描述
这是之前的代码,它有效
<?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 注入的预处理语句,现在新代码没有错误输出,也没有从 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();
?>
解决方案
确保使用相同的语句。如果你没有参数,你可以跳过绑定部分。
<?
$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
是准备好的语句而不是字符串。
删除提到的行应该可以解决问题。
推荐阅读
- python - 是否有任何现有的库用于内核大小大于 5 在 python 中使用 OpenCL 加速的中值滤波?
- typescript - 访问说明符触发错误 TS7008: Build:Member 'public' 隐式具有 'any' 类型
- typescript - 部署 TypeScript 文件 TFS 和 Octopus Deploy
- ruby - 安装插件后无法启动Redmine
- android - URL Waze (GPS),从浏览器指向应用程序
- vuetify.js - 如何在独立/CDN 模式下更改 Vuetify 中的主题颜色?
- ios - 如何使用 Swift 保存背景颜色?
- c# - SharpZipLib 在提交更新时抛出 System.IO.FileNotFoundException
- git - 如果在分支中工作,为什么 git push 需要额外的参数?
- react-native - React-native socket.io 发出/在未触发的动作上