Php sql查询未提取记录

Php sql查询未提取记录,php,mysql,pdo,Php,Mysql,Pdo,由于某些原因,SQL不会从所需的表中提取所需的信息。这很奇怪,因为我使用完全相同的代码从SQL中提取与用户id相关联的文件夹列表,这与它应该做的一样。所以URL查询看起来是这样的?o=文件夹&fid=0ec741fa-e708-4314-83c4-c05966a56110,fid是文件夹ID,下面的查询应该提取与此文件夹ID关联的任何文件,但是没有返回任何内容,甚至没有错误消息/代码 语法有问题吗?或者问题的原因是什么 更正我使用了错误的代码,因为我在记事本中打开了一堆标签++ 下面是用SQLP

由于某些原因,SQL不会从所需的表中提取所需的信息。这很奇怪,因为我使用完全相同的代码从SQL中提取与用户id相关联的文件夹列表,这与它应该做的一样。所以URL查询看起来是这样的?o=文件夹&fid=0ec741fa-e708-4314-83c4-c05966a56110,fid是文件夹ID,下面的查询应该提取与此文件夹ID关联的任何文件,但是没有返回任何内容,甚至没有错误消息/代码

语法有问题吗?或者问题的原因是什么

更正我使用了错误的代码,因为我在记事本中打开了一堆标签++

下面是用SQLPDO编写的实际代码

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> 
require(“sql/pdo.php”);
//让我们获取用户的文件夹信息
$query=“从fid=“.$”请求['fid']”的文件中选择*;
尝试
{ 
//这两条语句对数据库表运行查询。
$stmt=$db->prepare($query);
$stmt->execute();
} 
捕获(PDO异常$ex)
{ 
//注意:在生产网站上,不应输出$ex->getMessage()。
//它可能会向攻击者提供有关代码的有用信息。
die(“无法运行查询:”..ex->getMessage());
} 
//最后,我们可以使用fetchAll将找到的所有行检索到一个数组中
$rows=$stmt->fetchAll();
?>

在您的查询中,您使用的是
$\u GET['f']

但在您的url中,您正在传递
fid

当您将
$\u GET['f']
替换为
$\u 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>';
             } 
             ?>

在您的查询中,您正在使用
$\u GET['f']

但在您的url中,您正在传递
fid

当您将
$\u GET['f']
替换为
$\u 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>';
             } 
             ?>

代码基本正确,您应该使用PHPmyadmin或其他工具检查数据库的内容,查看它正在检索什么

要小心,因为直接从GET参数将值放入SQL查询中是危险的,在您的情况下,可能会有人(或自动脚本)使用“f”GET参数注入任意SQL代码。您应该将其转义为删除您的案例中未严格使用的所有字符(例如,仅保留字母和数字)。
这同样适用于
$file\u path
中的相同参数,它可以用于从internet的任何位置插入任意图像,甚至可以插入脚本或任意HTML代码


您应该描述您的表架构以了解此处发生的情况。

代码基本正确,您应该使用PHPmyadmin或其他工具检查数据库的内容,以查看它正在检索什么

要小心,因为直接从GET参数将值放入SQL查询中是危险的,在您的情况下,可能会有人(或自动脚本)使用“f”GET参数注入任意SQL代码。您应该将其转义为删除您的案例中未严格使用的所有字符(例如,仅保留字母和数字)。
这同样适用于
$file\u path
中的相同参数,它可以用于从internet的任何位置插入任意图像,甚至可以插入脚本或任意HTML代码


您应该描述您的表架构以了解此处发生的情况。

想想看,有人做了类似的事情
site.com/?f=drop table fs_files
@ilight首先,无法猜测文件夹散列,其次,您需要登录,更不用说我确实验证了所请求的文件夹实际属于用户的位置,并且在登录期间还为用户分配了一个全局令牌,因此无法伪造该令牌,因为每次重新分配该令牌login@Cl“只是检查一下!”!。。。这段代码似乎显示了另一种情况。尝试在sql提示符内执行sql语句,如phpmyadmin中的sql标记,然后查看结果想想看,有人做了类似这样的事情
site.com/?f=drop table fs_files
@ilight首先,无法猜测文件夹哈希,其次,您需要登录,更不用说我确实验证了所请求的文件夹实际属于用户的位置,并且在登录期间还为用户分配了一个全局令牌,因此无法伪造该令牌,因为每次重新分配该令牌login@Cl“只是检查一下!”!。。。这段代码似乎显示了另一种情况。请尝试在sql提示符内执行sql语句,就像在phpmyadmin中的sql标记中一样,并查看结果OK,因此现在唯一要做的是检查表,并尝试在phpmyadmin或其他工具内执行查询,以查看数据是否正确OK,因此,现在唯一要做的就是检查表,并在PHPMyAdmin或其他工具中尝试查询,以查看数据是否正确