0

我正在尝试为我的数据库中不同表的几个字段编码 json。下面是我的代码。我目前正在使用一个数组来表示我的表的名称($tablename)。我读过关于 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);

   ?>
4

2 回答 2

1

只要用户不能改变 的值$tablename,那么你就没有什么好害怕的。

于 2013-02-13T14:25:33.277 回答
0

作为一般规则,我建议您始终使用准备好的语句,即使没有用户输入。但从技术上讲,如果您绝对确定变量$tablename不能直接或间接修改(不依赖于其他用户输入的变量),那么我想可以这样做。

注意:无法准备表名(SELECT ... FROM :table WHERE ...将不起作用),因此有时您无法选择。

但有时很难跟踪变量的真正依赖关系,因此我仍然强烈建议您使用准备好的语句。

于 2013-02-13T14:24:45.490 回答