首页 >后端开发 >php教程 >PDO 参数可以用于 SQL 查询中的表名或列名吗?

PDO 参数可以用于 SQL 查询中的表名或列名吗?

Linda Hamilton
Linda Hamilton原创
2024-12-25 03:20:21855浏览

Can PDO Parameters Be Used for Table or Column Names in SQL Queries?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn