安全动态PHP SQL WHERE子句

时间:2014-07-04 19:24:35

标签: php mysql ajax

插入动态where子句的安全方法(例如bindParam,prepare())。这是通过ajax发送给PHP的。所以有些东西来自ajax形式

.php?where=name&what=bob

或者

.php?where=type$what=clothes

然后在PHP中将所有内容设置为变量,例如

if(isset($_POST['where'])){
  $where = $_POST['where'];
}
if(isset($_POST['what'])){
  $what= $_POST['what'];
}

然后运行一个函数来检索数据

function retrieveData($db, $where, $what){
  $getData = $db->prepare("SELECT name, type, stuff FROM tbl WHERE :where = :what");
  $getData->bindParam(':what',$what);
  $getData->bindParam(':where',$where);
  $getData->execute();
 ..............
}

当我运行这样的查询时,我总是得到关于

的SQL错误
'WHERE name = bob"

所以传递了值,但我猜SQL无效?

任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

我认为字符串应该引用

...WHERE name = 'bob'....

所以试试这个

 $getData->bindParam(':what',$what,PDO::PARAM_STR, 15);
 $getData->bindParam(':where',$where,PDO::PARAM_STR, 15);