2012-12-25 84 views
0

由於某些原因,SQL不會從需要的表中提取所需的信息。這很奇怪,因爲我使用完全相同的代碼來從SQL中拉取與用戶標識關聯的文件夾列表,並且它的工作方式與它應該一樣。所以URL查詢看起來像這樣?o =文件夾& fid = 0ec741fa-e708-4314-83c4-c05966a56110,fid是文件夾ID,下面的查詢應該拉出與這樣的文件夾ID相關聯的任何文件,但是沒有任何東西存在返回,甚至沒有錯誤消息/代碼。sql query not pulling records

語法有問題嗎?或者問題的原因是什麼?

改正我用錯誤的代碼,因爲我有TABS用記事本打開++一束

這是寫在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

**想想這個**有人做了這樣的事情'site.com/?f=drop table fs_files' –

+0

什麼都不會發生 –

+0

@iight首先沒有辦法猜測文件夾散列,其次你需要登錄不用說,我會確認請求的文件夾實際上屬於user_id,並且在登錄時也會爲用戶分配一個全局令牌,所以無法將其重新分配給每個登錄名 –

回答

3

在查詢ü使用$_GET['f']

但在你的網址你正在通過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>'; 
      } 
      ?> 
+0

對不起,我使用了錯誤的代碼位,實際代碼是PDO –

2

的代碼基本上是正確的,你應該使用phpMyAdmin或其他工具來檢查數據庫的內容,看看它的檢索。

要小心,因爲直接從GET參數中將值放入SQL查詢中是危險的,在您的情況下,某人(或者n個自動腳本)可能使用'f'GET參數注入任意SQL代碼。你應該避開它去除你的案例中沒有嚴格使用的所有字符(例如,只保留字母和數字)。
這同樣適用於$file_path中的相同參數,它可用於從互聯網的任何位置插入任意圖像,甚至可以使用腳本或任意HTML代碼。

你應該描述你的表模式來理解這裏發生了什麼。

+0

對不起,我使用了錯誤的代碼位,實際代碼是PDO –

+0

好吧,所以現在唯一要做的就是檢查表並嘗試PHPMyAdmin或其他工具中的查詢以查看數據是否正確 – Jacopofar