sql查询不拉记录

时间:2012-12-25 18:08:05

标签: php mysql pdo

由于某种原因,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> 

2 个答案:

答案 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代码。

您应该描述您的表架构,以了解这里发生了什么。