安全的动态PHP SQL WHERE子句


Safe dynamic PHP SQL WHERE clause

插入动态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是无效的?

感谢任何帮助。谢谢。

我认为字符串应该加引号

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

所以试试这样

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