转义为pdo->中的引号

时间:2014-08-21 18:03:35

标签: php mysql pdo

我在使用pdo->在mysql中准备时出现问题,继续查询:

$stmt = $this->pdo->prepare("SELECT * FROM :tabletype where name like :name");

解析为

SELECT * FROM 'type1' where name like 'souza'

使用名称字符串,但表格类型不能使用引号,是否可以使它在没有引号的情况下工作?

由于

3 个答案:

答案 0 :(得分:2)

您只能使用查询中允许表达式的占位符。由于表名不是表达式,因此您无法对其进行参数化。您必须显式连接变量。所以它应该是:

$this->pdo->prepare("SELECT * FROM `$tabletype` WHERE name LIKE :name");

答案 1 :(得分:1)

准备好的报表中的占位符只能代表VALUES。它们不能用于替换SQL关键字或表/字段名称。如果要在查询中使用动态表名,则必须手动插入:

$tbl = 'foo';
$dbh->prepare("SELECT * FROM $tbl WHERE field = :placeholder");

是的,这可以让您了解SQL注入攻击。占位符非常方便,但它们并不普遍有用。

请注意,如果您正在进行LIKE比较并希望使用通配符,那么您将面临更多工作:

$dbh->prepare("SELECT * FROM tbl WHERE field LIKE CONCAT('%', :placeholder, '%')");

答案 2 :(得分:0)

您无法绑定表名和列名。使用返回tick(`)表示表名,列名等标识符。

尝试这样:

$stmt = $this->pdo->prepare("SELECT * FROM `type1` where `name` like :name");