2016-12-09 12 views
0

私は自分のデータベースに少し "検索エンジン"を作りたいと思っていました。 私のjavascriptは次のとおりです。WHEREの条件としてajaxとPDO変数

$(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>"; 

を持っていますできます。今私はポストとparamとそれを取得するときに動作しません。 connection.phpは条件と連動しているため正しいです。

答えて

2

これは間違っている:

... WHERE :waar=:postname 

あなたが唯一のプリペアドステートメントではなく、カラム・またはテーブル名にプレースホルダを使用して値をバインドすることができます。

クライアント提供の列名または表名を受け入れて使用する場合、その名前を保護する唯一の方法は、ホワイトリストと照合してからクエリ文字列に直接挿入することです。

+0

私はそれをSQLSの注射を保護する方法を知っているが、なぜ文が次のように働いていないのか:waar where whereと:postnameは値 としてwaar = nameとpostname testがWHERE name = "test "これは動作するはずです –

+0

@emielpopelierこれは仕様です。私が知っているように、それは主に、SQLエンジンが準備時にテーブル名やカラム名が不明なときには何も準備できないためです:どのインデックスを使用するのか、クエリの最適化の仕方などはわかりませんそれで、本当に準備することは何もありません。 SQLインジェクションセキュリティは、その優れた副作用です。 – jeroen

+0

私は、準備にクエリを変更しようとしましたが、いずれの結果も得られませんでした。準備の代わりに何か他のものがありますか? –

関連する問題