由于PDOStatement::
执行文档中说,“所有的值都为PDO::PARAM_STR
处理 所以我有以下问题绑定值和参数在PDO预处理语句:PHP
1)假设我有一个变量$_SESSION['id']=2
和查询
$sql='select * from articles where id=?';
$query=$con->prepare($sql);
$query->execute(array($_SESSION['id']));
当我执行语句,它成功地执行。 这意味着它作为一个整数.Does它做自动注入或违反该文件的语句将变量?
2)Suppse我有另一个查询
select * from articles where id=? and category=?
现在,这里第一个参数是int
和最后一个参数是string
所以当我绑定参数$query->bindValue(2, $_GET['category'],PDO::PARAM_STR);
做我需要指定PDO::PARAM_STR
或者我可以依靠的默认实现,它默认情况下视为string
,如文档所述。 3)我想从$_GET['category']
到查询中指定表名,但是我得到了以下格式的字符串(注意引用表名),从而导致SQL error.How我可以纠正它吗?
select * from 'article'...........
在最后一个问题我想动态改变表名,其中我通过获取'GET'.Isn't有什么办法来创建动态表名这样的查询。这就是最后一个问题 –
的目的,你必须这么做:'“SELECT * FROM $ table ...”'。您必须保留*允许的表名称*白名单*!在以这种方式将查询插入查询之前,检查“$ table”是否是一些允许的值之一。 – deceze
@InsaneCoder如果你需要的话,这意味着你的数据库设计是*疯狂*,你最好使它*正常* –