我正在尝试为我的数据库中不同表的几个字段编码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);
?>
答案 0 :(得分:1)
只要用户无法更改$tablename
的值,您就不必担心。
答案 1 :(得分:0)
作为一般规则,我建议您即使没有用户输入也始终使用预准备语句。但从技术上讲,如果你绝对确定变量$tablename
无法直接修改或间接(不依赖于其他用户输入的变量)那么我想可以选择。< / p>
注意:无法准备表名(SELECT ... FROM :table WHERE ...
不起作用),因此有时您无法选择。
但有时很难跟踪变量的真正依赖关系,因此我仍然强烈建议您使用预先准备好的语句。