Javascript ajax&;PDO变量作为WHERE的条件

Javascript ajax&;PDO变量作为WHERE的条件,javascript,php,mysql,ajax,pdo,Javascript,Php,Mysql,Ajax,Pdo,所以我想为我的数据库做一个小小的“搜索引擎”。 我的javascript是: $(document).ready(function () { $("#display").click(function () { var zoeknaam = $("#zoeknaam").val(); var zoektype = $("#zoektype").text(); $.ajax({ //create an ajax request

所以我想为我的数据库做一个小小的“搜索引擎”。 我的javascript是:

 $(document).ready(function () {
     $("#display").click(function () {
         var zoeknaam = $("#zoeknaam").val();
         var zoektype = $("#zoektype").text();
         $.ajax({    //create an ajax request to load_page.php
             type: "POST",
             url: "display.php",
             data: { name: zoeknaam, zoekt: "name" },
             dataType: "html",   //expect html to be returned                
             success: function (response) {
                 $("#responsecontainer").html(response);
                 //alert(response);
             }

         });
     });
 });
我的html如下所示:

<input type="text" name="inputtext" id="zoeknaam" />
<select name="searchtype" id="zoektype"><option value="name">name</option><option value="age">age</option></select>
<input type="button" id="display" value="Display All Data" />

姓名
现在我有了我的php

include("connection.php");
$dataget = $_POST["name"];
$datawaar = $_POST["zoekt"];
$stmt = $conn->prepare("SELECT * FROM student WHERE :waar=:postname");
$stmt->bindParam(':waar', $datawaar, PDO::PARAM_STR);
$stmt->bindParam(':postname', $dataget, PDO::PARAM_STR);
$stmt->execute();
echo "<table>";
while($data = $stmt->fetch(PDO::FETCH_ASSOC))
{   
    echo "<tr>";
    echo "<td align=center>$data[name]</td>";
    echo "<td align=center>$data[address]</td>";
    echo "<td align=center>$data[age]</td>";
    echo "</tr>";
}
echo "</table>";
include(“connection.php”);
$dataget=$\u POST[“name”];
$datawaar=$_POST[“zoekt”];
$stmt=$conn->prepare(“从学生中选择*,其中:waar=:postname”);
$stmt->bindParam(':waar',$datawaar,PDO::PARAM_STR);
$stmt->bindParam(':postname',$dataget,PDO::PARAM_STR);
$stmt->execute();
回声“;
而($data=$stmt->fetch(PDO::fetch_ASSOC))
{   
回声“;
回显“$data[名称]”;
回显“$data[地址]”;
echo“$data[年龄]”;
回声“;
}
回声“;
当我删除where条件并将该条件设置为name时,它将工作。现在,当我用post和param检索它时,它不起作用。 connection.php是正确的,因为它与条件一起工作。

这是错误的:

... WHERE :waar=:postname
只能在准备好的语句中使用占位符绑定值,而不能使用列名或表名

如果要接受并使用客户端提供的列名或表名,唯一的安全方法是对照白名单检查它们,然后将它们直接插入查询字符串中。

这是错误的:

... WHERE :waar=:postname
只能在准备好的语句中使用占位符绑定值,而不能使用列名或表名


如果要接受并使用客户机提供的列名或表名,唯一的安全方法是,就是对照白名单检查它们,然后直接将它们注入查询字符串。

我知道如何在sql注入时保护它,但为什么语句不能使用:waar作为where条件,而:postname作为值,因为如果waar=name和postname test,语句将具有where name=“test”哪个应该work@emielpopelier这是故意的。据我所知,这主要是因为sql引擎在准备时无法准备表和/或列名未知时的任何内容:它不知道要使用哪些索引,如何优化查询,等等。因此实际上没有什么需要准备的。Sql注入安全性只是一个很好的副作用。我尝试将prepare改为查询,但也没有给出任何结果。还有什么东西可以代替->prepare?@emielpopelier我不知道你改变了什么,但底线是你只能对值使用占位符,而不能对列或表名(或运算符等)使用占位符。我想我不需要prepared-then,但我需要什么呢?我是否需要$conn->query(“从studend中选择*,其中:waar=:postname”)?既然这样做不起作用,我知道如何在sql注入时保护它,但为什么语句不能使用:waar作为where条件,而:postname作为值,因为如果waar=name和postname测试,那么语句将具有where name=“test”,这应该是work@emielpopelier这是故意的。据我所知,这主要是因为sql引擎在准备时无法准备表和/或列名未知时的任何内容:它不知道要使用哪些索引,如何优化查询,等等。因此实际上没有什么需要准备的。Sql注入安全性只是一个很好的副作用。我尝试将prepare改为查询,但也没有给出任何结果。还有什么东西可以代替->prepare?@emielpopelier我不知道你改变了什么,但底线是你只能对值使用占位符,而不能对列或表名(或运算符等)使用占位符。我想我不需要prepared-then,但我需要什么呢?我是否需要$conn->query(“从studend中选择*,其中:waar=:postname”)?因为这也没用