2013-02-13 145 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的值,那么你就没有什么可害怕的了。