我在使用pdo->在mysql中准备时出现问题,继续查询:
$stmt = $this->pdo->prepare("SELECT * FROM :tabletype where name like :name");
解析为
SELECT * FROM 'type1' where name like 'souza'
使用名称字符串,但表格类型不能使用引号,是否可以使它在没有引号的情况下工作?
由于
答案 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");