pdo->prepare中的转义引号


Escape quotes in pdo->prepare

我在mysql中有pdo->准备的问题,这里的查询:

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

解析为

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

名称字符串没问题,但表类型不能使用引号,有没有办法使它工作没有引号?

谢谢

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

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

预处理语句中的占位符只能表示VALUES。它们不能用于替换SQL关键字或表/字段名。如果希望在查询中使用动态表名,则必须手动插入:

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

是的,这使您容易受到SQL注入攻击。占位符非常方便,但它们并不是普遍有用。

请注意,如果您正在进行LIKE比较并想要使用通配符,您将有更多的工作要做:

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

不能绑定表名和列名。对表名、列名等标识符使用反打号(')

试试:

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