Javascript MySQL使用Ajax返回表名而不是值
我试图发出一个AJAX请求,从数据库中获取一些数据,但返回的唯一内容是列的名称。有人能解释一下原因吗? 这是我的密码: =>表名:-tblstudentsJavascript MySQL使用Ajax返回表名而不是值,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我试图发出一个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方法: f
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);
}
});
}
fetchFromDBPHP(column, fname, id, "one");
var result = localStorage.getItem("one");
console.log("Result: " + result);
<?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);
}
?>
=>Javascript:
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);
}
});
}
fetchFromDBPHP(column, fname, id, "one");
var result = localStorage.getItem("one");
console.log("Result: " + result);
<?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);
}
?>
=>PHP:
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);
}
});
}
fetchFromDBPHP(column, fname, id, "one");
var result = localStorage.getItem("one");
console.log("Result: " + result);
<?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);
}
?>
您在查询中使用了错误的引号
"SELECT '$column' FROM ..."
…将只返回变量$column
的值,而不是实际数据库列的值
将其更改为(反勾号):
会有用的
一个重要的提示。。。
…发布的代码对查询非常开放,应该使用参数化而不是串联查询中的变量。特别是因为用户输入根本不会转义
根据经验,永远不要相信用户的输入
对于无法参数化的列名,您应该创建一个包含允许列名的白名单。您在查询中使用了错误的引号
"SELECT '$column' FROM ..."
…将只返回变量$column
的值,而不是实际数据库列的值
将其更改为(反勾号):
会有用的
一个重要的提示。。。
…发布的代码对查询非常开放,应该使用参数化而不是串联查询中的变量。特别是因为用户输入根本不会转义
根据经验,永远不要相信用户的输入
关于无法参数化的列名,您应该创建一个包含允许列名的白名单。您能给我们显示实际的JSON吗?我的猜测是,可能您有一个空的结果集,带有列标签,没有数据。请注意,AJAX是异步的,因此您不能在调用它之后立即访问它的结果,您必须将控制台.log
放在success
回调中。否则,此时请求仍将进行。选择“$column”
错误。它应该是选择“$column”
(反勾号而不是单引号)。但是,您对参数化查询非常开放,应该真正使用参数化查询,而不是串联查询。特别是因为你根本没有逃避用户的输入!永远不要相信用户的输入。关于无法参数化的列名,您应该创建一个包含允许列名的白名单。@Magnus Eriksson,您完全正确!背部蜱虫是解决方案!非常感谢!!:)我同意,代码对SQL注入非常开放。我有一些更好的代码来使用准备好的语句。再次感谢你的帮助!我在哪里可以给你投票?你能给我们看一下实际的JSON吗?我的猜测是,可能您有一个空的结果集,带有列标签,没有数据。请注意,AJAX是异步的,因此您不能在调用它之后立即访问它的结果,您必须将控制台.log
放在success
回调中。否则,此时请求仍将进行。选择“$column”
错误。它应该是选择“$column”
(反勾号而不是单引号)。但是,您对参数化查询非常开放,应该真正使用参数化查询,而不是串联查询。特别是因为你根本没有逃避用户的输入!永远不要相信用户的输入。关于无法参数化的列名,您应该创建一个包含允许列名的白名单。@Magnus Eriksson,您完全正确!背部蜱虫是解决方案!非常感谢!!:)我同意,代码对SQL注入非常开放。我有一些更好的代码来使用准备好的语句。再次感谢你的帮助!我在哪里可以给你投票?