PDO 参数:它们可以接受表名或列名作为输入吗?
尝试将表名作为参数包含在准备好的 PDO 中语句,如下面的代码片段所示,将导致failure:
$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1'); if ($stmt->execute(array(':table' => 'users'))) { var_dump($stmt->fetchAll()); }
为什么这不可能?
PDO 参数适用于在查询执行期间动态分配的数据值。另一方面,表和列名称是数据库模式的静态元素,不适合参数化。
包含表名称的安全替代方案
安全插入将表名放入 SQL 查询中,建议手动过滤和清理数据。这可以通过将白名单 switch() 语句合并到动态执行查询的函数中来实现:
function buildQuery( $get_var ) { switch($get_var) { case 1: $tbl = 'users'; break; } $sql = "SELECT * FROM $tbl"; }
通过设置特定情况并处理任何无效场景,查询将仅在允许的情况下执行表名。这种方法确保用户输入不会直接影响 SQL 查询,从而保持数据完整性。
以上是PDO 参数可以用于 SQL 查询中的表名或列名吗?的详细内容。更多信息请关注PHP中文网其他相关文章!