我试图发出一个AJAX请求来从数据库中获取一些数据,但唯一返回的是列的名称。有人可以解释一下原因吗? 这是我的代码:
=>表名: - tblstudents
id = 0
fname = john
lname = doe
tel = 555-564-1585
id = 1
fname = paul
lname = smith
tel = 555-134-5644
id = 2
fname = laura
lname = mcdo
tel = 555-465-7512
=> AJAX方法:
function fetchFromDBPHP(column, fname, id, tel) {
$.ajax({
type: "post",
url: "./php/fetchFromDB.php",
dataType: 'json',
data: { column: column, fname: fname, id: id },
success: function(data) {
localStorage.setItem(tel, data);
},
error:function(request, status, error) {
console.log("** Error from fetchFromDBPHP **");
console.log("Error: " + error + "\nMessage: " + request.responseText);
}
});
}
=> Javascript:
fetchFromDBPHP(column, fname, id, "one");
var result = localStorage.getItem("one");
console.log("Result: " + result);
=> PHP:
<?php
$column = $_POST['column'];
$fname = $_POST['fname'];
$id = $_POST['id'];
if (isset($column)) {
$sql = "SELECT '$column' FROM tblstudents WHERE fname = '$fname' AND id = '" . intval($id) . "'";
$con = mysqli_connect("localhost", "root", "", "test");
if (!$con) {
die("Connection failed: " . mysqli_error($con));
}
$result = mysqli_query($con, $sql);
$to_encode = array();
while($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
$to_encode[] = $row;
}
echo json_encode($to_encode);
mysqli_close($con);
}
?>
您可能知道,column
,fname
和id
在Javascript代码中包含值。由于我的数据库更长,我试图尽可能接近我的真实代码。唯一的问题是,AJAX请求的结果给了我一个JSON对象结果,其中包含列的名称,而不是其内容。
有人可以帮忙吗?在此先感谢:)
答案 0 :(得分:4)
您在查询中使用了错误的引号。
"SELECT '$column' FROM ..."
...只会返回变量$column
的值,而不是实际数据库列的值。
将其更改为(后退):
"SELECT `$column` FROM ..."
会奏效。
...发布的代码对SQL Injections是开放的,应该使用参数化Prepared Statements而不是查询中变量的连接。特别是因为用户输入根本没有转义。
经验法则,永远不会信任用户输入。
关于无法参数化的列名,您应该创建一个包含允许列名的白名单。