【发布时间】:2017-10-20 14:41:47
【问题描述】:
所以我想在 CakePHP 3.4.7 中执行以下 SQL 查询:
DROP DATABASE $databasename
我发现这不起作用:
$conn->execute("DROP DATABASE :databasename", ['databasename' => $databasename]);
...因为 MySQL 不接受数据库和表名作为准备好的语句中的参数(请参阅Can PHP PDO Statements accept the table or column name as parameter?)
我不能使用 CakePHP 的 Sanitize 类,因为它在 CakePHP 3 (https://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#sanitize) 中已被弃用
我不能使用 mysqli::real_escape_string 因为 AFAIK 没有 mysqli 对象...
有人知道替代品吗?
【问题讨论】:
-
转义不起作用,因为这将用于引号,引号不适用于表/列。您可以将允许的条款列入白名单,然后将其传入。
-
我想我应该只担心插入分号?但我也在考虑采用白名单方式。
-
我猜你有一个可以删除的数据库列表。您不能只检查该术语是否在该列表中吗?
-
有一个列表,但我也不相信。
标签: php mysql cakephp-3.0