MySQL使用Ajax

时间:2017-10-03 11:27:18

标签: 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方法:

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);
    }
?>

您可能知道,columnfnameid在Javascript代码中包含值。由于我的数据库更长,我试图尽可能接近我的真实代码。唯一的问题是,AJAX请求的结果给了我一个JSON对象结果,其中包含列的名称,而不是其内容。 有人可以帮忙吗?在此先感谢:)

1 个答案:

答案 0 :(得分:4)

您在查询中使用了错误的引号。

"SELECT '$column' FROM ..."

...只会返回变量$column的值,而不是实际数据库列的值。

将其更改为(后退):

"SELECT `$column` FROM ..."

会奏效。

重要的一点......

...发布的代码对SQL Injections是开放的,应该使用参数化Prepared Statements而不是查询中变量的连接。特别是因为用户输入根本没有转义。

经验法则,永远不会信任用户输入。

关于无法参数化的列名,您应该创建一个包含允许列名的白名单。