由于某种原因,SQL不会从所需的表中提取所需的信息。这很奇怪,因为我使用完全相同的代码来从SQL中提取与用户ID相关联的文件夹列表,并且它的工作方式应该如此。所以URL查询看起来像这样?o = folder& fid = 0ec741fa-e708-4314-83c4-c05966a56110,fid是文件夹ID,下面的查询应该拉出与这样的文件夹ID相关的任何文件但是没有什么是返回,甚至没有错误信息/代码。
语法有问题吗?或者问题的原因是什么?
修正我使用了错误的代码,因为我已经在NOTEPAD ++中打开了标签
以下是用SQL PDO编写的实时代码
require ("sql/pdo.php");
// Lets get user's folder information
$query = " SELECT * FROM files WHERE fid = ".$_REQUEST['fid']." ";
try
{
// These two statements run the query against your database table.
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
// Finally, we can retrieve all of the found rows into an array using fetchAll
$rows = $stmt->fetchAll();
?>
<table width="100%">
<?php foreach($rows as $row): ?>
<tr onclick="window.location = 'file.php?fid=<?php echo htmlentities($row['id'], ENT_QUOTES, 'UTF-8')."'">
<td style="width:4%;"><img src="ast/images/fs-directory.png" /></td>
<td style="width:86%;text-align:left;"><?php echo htmlentities($row['name'], ENT_QUOTES, 'UTF-8'); ?></td>
<td style="width:10%;text-align:center;"><?php echo htmlentities($row['privacy'], ENT_QUOTES, 'UTF-8'); ?></td>
</tr>
<?php endforeach; ?>
</table>
答案 0 :(得分:3)
在您的查询中,您正在使用$_GET['f']
但在您的网址中,您正在通过fid
$_GET['f']
替换$_GET['fid']
时,代码可能会有效
<?php
$sql = mysql_query("SELECT * FROM `fs_files` WHERE fid = '".$_GET['fid']."'") or die(mysql_error());
while($row = mysql_fetch_array( $sql )) {
if (in_array($row['file_type'], array('jpeg', 'jpg', 'png', 'gif'))) {
$img = "obj.php?id=".base64_encode($row['file_path'])."&mode;thumb";
} else {
$img = "assets/filesystem/file_extension_".$row['file_type'].".png";
}
$type = $row['file_type'];
$file_name = substr($row['file_name'], 0, 50);
$file_path = "view/".$_GET['fid']."/".$row['id']."/".$row['file_name'];
echo '<a href="?p=view&f='.$row['id'].'&q='.$file_path.'"><img src="'.$img.'" />'.$file_name.'
<span style="float:right;">'.$type.'</span></a>';
}
?>
答案 1 :(得分:2)
代码基本上是正确的,您应该使用PHPmyadmin或其他工具来检查数据库的内容,以查看它正在检索的内容。
要小心,因为直接从GET参数将值放入SQL查询中是危险的,在您的情况下,某人(或自动脚本)可能会使用'f'GET参数注入任意SQL代码。你应该逃避它删除你的案件不严格使用的所有字符(例如,只保留字母和数字)。
这同样适用于$file_path
内的相同参数,它可以用于从互联网中的任何地方插入任意图像,甚至是脚本或任意HTML代码。
您应该描述您的表架构,以了解这里发生了什么。