2013-02-13 95 views
0

我想在我的數據庫中對不同表格的幾個字段進行編碼json。以下是我的代碼。我目前使用一個數組來表示我的表名($ tablename)。我已閱讀關於SQL注入,但他們似乎專注於用戶輸入。但是,在這種情況下,沒有用戶與我的數據庫進行交互。這是我的應用程序的後端。任何使用這種變量名稱的想法?謝謝在SQL查詢中使用變量(不是用戶輸入的)

我也看着準備報表,但它很難以我想要的形式獲取數據。

<?php 

include $_SERVER['DOCUMENT_ROOT'] . '/mmcv/buildchartInfo.php'; 

    $position = 0; 
    $results = array(); 

    foreach($chartnames as $tablename) { 

     print $tablename."<br />"; 

     encodejson($tablename); 


    } 

    function encodejson($tablename){ 


    include $_SERVER['DOCUMENT_ROOT'] . '/mmcv/includes/connect.inc.php'; 

    $sql="SELECT rank, name FROM $tablename"; 


    $result = mysqli_query($connection,$sql); 

    //Error when data isn't returned 
    if(!$result) 
    { 
     $output = "error getting data"; 
     echo $output; 
     //$GLOBALS['loginError'] = "error getting log in data"; 
     exit(); 
    } 


    while($row=mysqli_fetch_assoc($result)) $output[]=$row; 

    print(json_encode($output)); 

    } 

    mysqli_close($connection); 

    ?> 
+0

是的,爲什麼不。你在這裏有一個真正的問題嗎? – 2013-02-13 14:22:04

+0

沒有錯如果你是絕對確定** – itachi 2013-02-13 14:25:21

+0

@fab抱歉如果問題不明確。我只是試圖確定變量名稱中是否有任何錯誤,如上所示 – AndroidEnthusiast 2013-02-13 14:29:27

回答

0

作爲一般規則,我建議你總是使用準備好的語句,即使沒有用戶輸入。但從技術上講,如果你確定變量$tablename不能直接修改或間接(不依賴於其他用戶輸入的變量),那麼我想這是可以的。

注意事項:無法準備表名(SELECT ... FROM :table WHERE ...將無法​​使用),因此有時您無法選擇。

但有時它很難追蹤變量的真正依賴關係,因此我仍然強烈建議您使用準備好的語句。

+0

對不起,這不是我 – AndroidEnthusiast 2013-02-13 14:28:09

+0

@AndroidEnthusiast,**通知**編輯我忘了添加在首位。 – Shoe 2013-02-13 14:39:01

1

只要用戶不能更改$tablename的值,那麼你就沒有什麼可害怕的了。