Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MySQL使用Ajax返回表名而不是值_Javascript_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Javascript MySQL使用Ajax返回表名而不是值

Javascript 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

我试图发出一个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);
        }
    });
}
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注入非常开放。我有一些更好的代码来使用准备好的语句。再次感谢你的帮助!我在哪里可以给你投票?